Linux 信号(signal):信号的相关函数

news/2024/5/18 23:40:29 标签: linux, 信号, signal, 函数

目录

  • 1.kill
  • 2.raise
  • 3.abort
  • 4.alarm
  • 5.sigqueue
  • 6.signal
  • 7.例子

  使用信号时离不开各种函数,本文来看看在使用信号时最常用的几个函数

  1. kill:给指定进程发送指定信号
  2. raise:给调用进程发送指定信号
  3. abort:终止程序的运行
  4. alarm:定时器
  5. sigqueue:给指定进程发送指定信号并携带信息
  6. signal:修改指定信号的处理方式

1.kill

int kill(pid_t pid, int sig)

 作用:给指定的进程发送一个指定的信号

  • pid_t pid:指定的进程id
  • int sig:要发送的信号。注意:信号其实是一个宏。

 返回值:成功返回0,失败返回-1。

2.raise

int raise(int sig)

 作用:给调用这个函数的进程发送一个指定的信号

 返回值:成功返回0,失败返回非0。

3.abort

void abort()

 作用:中止程序执行,直接从调用的地方跳出。这其实是一个异常。SIGABRT

4.alarm

unsigned int alarm(unsigned int seconds)

 作用:这个是定时器,当程序调用这个函数之后,开始计时,当计时到达规定时间后,内核会发送SIGALRM信号信号作用:退出进程)给进程。

  • unsigned int seconds:要计时的时间长度

5.sigqueue

int sigqueue(pid_t pid, int sig, const union sigval value)

 作用:给指定进程发指定信号并携带信息。

  • pid_t pid:指定的进程id
  • int sig:要发送的信号
  • const union sigval value:要携带的信息,通常并不会携带信息,因此通常置NULL

 返回值:成功返回0,失败返回非0。

signal_57">6.signal

 typedef void (*sighandler_t)(int)

 这是声明了一个返回值为void,参数为int的函数指针类型

sighandler_t signal(int signum, sighandler_t handler)

 作用:修改指定信号的处理方式

  • int signum:传入指定信号
  • sighandler_t handler:该信号新的处理方式。可以传入自定义的信号处理函数 或者 SIG_DFL(默认处理方式)或者 SIG_IGN(忽略处理方式)

 返回值:该信号原先的信号处理函数

7.例子

 这里来展示一下如何修改指定信号的处理函数

(1)定义自定义处理函数

  • void sigcb(int no){}

  注意自定义处理函数的形式,函数的形式必须和系统的默认处理函数相同,返回值为void,参数为int。

  这个 int no 参数其实就是这个处理函数对应的信号,调用这个处理函数时,就会把信号作为参数传递进去。

(2)修改3号信号的处理函数为sigcb函数

signal函数的返回值是3号信号原先的处理函数


http://www.niftyadmin.cn/n/176734.html

相关文章

【排序算法】

比较排序 七大排序算法 ❤️稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]r[j],且r[i]在r[j]之前,而…

Cisco路由器配置DHCP服务及中继

Cisco路由器配置DHCP服务及中继 拓扑示意 R1 LAN侧的网段为192.168.10.0/24 默认网关为192.168.10.1 R2 LAN侧的网段为192.168.20.0/24 默认网关为 192.168.20.1 DNS服务器地址为 192.168.10.2 R0的G0/0的地址为 10.1.1.1 R0的G0/1地址为 10.1.1.2 配置 从池中排除地址 …

半导体器件基础06:发光二极管

说在开头:关于玻尔原子模型(1) 卢瑟福的模型面临着与经典电磁波理论的矛盾,按照经典电磁波理论,卢瑟福的原子不可能稳定存在超过1秒钟。玻尔面临着选择:要么放弃卢瑟福模型,要么放弃麦克斯韦伟…

一文搞懂 Kubernetes 的 Limits 和 Requests

当在Kubernetes中使用容器时,重要的是要知道所涉及的资源是什么以及如何需要它们。有些进程比其他进程需要更多的CPU或内存。有些是关键的,不应该被饿死。知道了这一点,我们应该正确配置我们的容器和Pod,以获得两者的最佳效果。在…

算法训练营第五十九天|LeetCode647、516

题目连接:647. 回文子串 - 力扣(LeetCode)个人思路:dp数组的含义是:dp[i][j]:s字符串下标i到下标j的字串是否是一个回文串这里我出现了错误为什么出错呢?代码如下:class Solution {p…

Linux中shell内外命令讲解(下)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放&#xff0…

正向代理配置

比如场景: 机房中只有一台机子可以联网,其他机器只有内网,内网机器想用yum安装软件包,在能联网的机器上配置一个正向代理。 server{listen 80 default_server;resolver 119.29.29.29;location / {proxy_pass http://$host$reques…

解决Xshell无法连接Kali Linux 2020.1(2019.3)版本

使用Xshell远程终端工具连接虚拟机的Kali Linux却提示连接不上原因:Kali Linux默认没有打开SSH远程登录,SSH就是一种网络协议,用于加密的远程登录,所以在没有打开SSH协议之前是无法使用Xshell连接Kali Linux的。解决办法&#xff…