首页 > 代码库 > 信号(二)---signal函数详解
信号(二)---signal函数详解
前面提到了当进程收到了信号后,有三种处理信号的方法:忽略该信号;执行默认动作;捕捉该信号。
捕捉信号 的意思就是当进程收到一个信号时去执行我们指定的动作。signal 函数就是Linux系统提供用来捕捉信号的函数。
========================================================
函数原型:
函数参数:
- signum:捕捉的信号
- handler:收到信号后执行的动作,是个函数指针变量
返回值:
- 调用失败时返回 SIG_ERR
- 调用成功时返回 指向之前的信号处理程序的指针变量
=======================================================
signal 函数的参数handler除了可以是一个函数的地址之外,还可以是两个宏:SIG_IGN和SIG_DEL。
如果传的是 SIG_IGN,那么表示对于 signum 信号的处理方式是忽略该信号(注意不是默认动作中的忽略);SIG_IGN==(void(*)(int))1
如果传的是 SIG_DFL,那么表示对于 signum 信号的处理方式是采用默认动作。SIG_DFL==(void(*)(int))0
=====================================================
当调用exec函数后,进程会将原来应该要捕捉的信号全部修改成为默认动作,而其余信号处理方式保持不变。之所以要这样处理是因为当调用exec函数后,原来进程的代码段、数据段以及堆栈都将会被覆盖,那么原来设置的信号处函数的地址将在exec后失去意义,不能使用。
当使用fork创建一个子进程时,子进程会继承父进程的信号处理方式。
信号(二)---signal函数详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。