本文介绍两个信号处理机制signal和sigaction。
一 signal
void (*signal(int signo, void (*func)(int)))(int); // 该函数在不同的linux系统中可能会存在差别,该函数现在很少用
参数:int signo, void(* func)(int)
返回类型:参数为int型,返回void型函数指针
调用上述函数时,第一个参数为特殊情况信息,第二个参数为特殊情况下要调用的函数的地址值(指针)。当发生第一个参数
代表的情况的时候,调用第二个参数所指的函数。
singal函数中注册的部分特殊情况和对应的常数
SIGALRM:已到通过调用alarm函数注册的时间
SIGINT:输入CTRL+C
SIGCHLD:子进程终止
unsigned int alarm(unsigned int seconds)
该函数接收一个正整型参数,相应的时间(以秒为单位)后将产生SIGALRM信号,若向该函数传递0,则之前对SIGALRM信号的预约将取消
如果通过该函数预处理信号后未指定该信号对应的处理函数,则终止进程,不做任何处理。
示例:(产生信号时会唤醒处于睡眠状态的进程,所以下面的示例执行不到100秒)