signal()函数学习笔记

signal()函数

[包含库]

#include <signal.h>

[函数原型]

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

[函数功能]

        signal()函数的功能是设置某一信号的对应动作,即signal()会依参数signum指定的信号编号来设置该信号的处理函数,当指定的信号到达时就会跳转到参数handler指定的函数执行。当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断。

      第一个参数signum,指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号;系统的信号类型可以在Linux的终端键入kill -l查看(共64个),其实这些信号类型是系统定义的宏。

      第二个参数handler,描述了与信号关联的动作,即信号处理的方式。它可以取以下三种值:

(1)SIG_IGN:表示忽略该信号;

(2)SIG_DFL:恢复对信号的系统默认处理。不写此处理函数,默认也是执行系统默认操作;

(3)sighandler_t类型的函数指针:函数指针所指向的函数必须在signal()被调用前申明,handler参数为这个函数的名字。当接  收到一个类型为sig的信号时,就执行handler所指定的函数。signum是传递给handler所指定的函数的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行handler所指定的函数。当handler所指定的函数执行结束后,控制权返回进程被中断的那一点继续执行。

[函数返回值]

      返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。

[参考文献]

https://blog.csdn.net/zwz2011303359/article/details/81811877

https://blog.csdn.net/yyyljw/article/details/80741264

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值