1.信号(signal)为int类型,处理函数为void (*handler)(int)类型,信号集为sigset_t类型。处理信号的接口,返回值一般规定为:执行成功返回0,执行失败返回SIG_ERR(-1).
2.设置信号处理的接口,常用的有signal()和sigaction()。
signal()设置的信号处理函数是一次性的,被调用过一次后会被替换为系统默认处理函数。为了实现链式操作,signal()返回值为参数中的handler函数指针。相关定义如下:
#include<signal.h>
void(*signal(int signumber,void ((*func)(int))(int)
3.sigaction()更为强大,可以设置与进程始终的信号处理函数。相关定义如下
#include <signal.h>
int sigaction(int signumbet,const structsigaction *act,struct sigaction *oldact);
struct sigaction
{
void(*sa_handler)(int);
void(*sa_sigaction)(int,siginfo_t *,void *);
sigset_tsa_mask;
intsa_flags;
}
sigaction.sa_flags的取值如下表,取0表示选用所有默认选项。
SA_NOCLDSTOP:用于表示信号SIGCHLD,当子进程被中断时,不产生此信号,当且仅当子进程结束时产生此信号。
SA_NOCLDWATI:当信号为SIGCHLD,时可避免子进程僵死。
SA_NODEFER:当信号处理函数正在进行时,不堵塞对于信号处理函数自身信号功能。
SA_NOMASK:同SA_NODEFER
SA_ONESHOT:当用户注册的信号处理函数被执行过一次后,该信号的处理函数被设为系统默认的处理函数。
SA_RESETHAND:同SA_ONESHOT
SA_RESTART:是本来不能重新于运行的系统调用自动重新运行。
SA_SIGINFO:表明信号处理函数是由SA_SIGACTION指定的,而不是由SA_HANDLER指定的,它将显示更多的信号处理函数信息。