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