信号的相关处理
signal函数
用来设置进程在接收到信号时的动作.在Shell下输入man signal可获取函数原型如下:
signal会根据参数signum指定的信号编号来设置该信号的处理函数,*当指定的信号到达时就会跳转到参数handler指定的函数执行.
如果参数handler不是函数指针,则必须是常数SIG_IGN(忽略该信号)或SIG_DFL(对该信号执行默认操作).**handler是一个函数指针,它所指向的函数的类型是sighandler_t,即它所指向的函数有一个int型参数,且返回值的类型为void
*signal函数执行成功时返回以前的信号处理函数指针,当有错误发生时则返回SIG_ERR(即-1).
sigaction函数
*sigaction函数可以用来检查或设置进程在接收到信号时的动作,在Shell下输入man sigaction可获取该函数的原型:
*sa_flags成员
*SA_NOMASK或SA_NODEFER:在信号处理函数结束前允许此信号再次递送,相当于中断嵌套.
不可重入函数
1>.使用了静态的数据结构,如getgrgid(),全局变量等.
2>.函数实现时,调用了malloc()或者free()函数.
3>.函数实现时,使用了标准I/O函数.
称数据会被破坏的函数为不可重入函数.编写信号处理函数时不要使用不可重入函数.
pause函数
*pause函数使调用进程挂起直至扑捉到一个信号.在shell下输入man pause可得函数原型如下:
*pause函数会令目前的进程暂停,即进入睡眠状态,直到被信号signal中断.该函数只返回-1,并将error设置为EINTR