信号就是告知某个进程发生了某个事件的通知,有时也称为软件中断.
信号可以:
- 由一个进程发给另一个进程
- 由内核发给某个进程
(1)信号处理函数:只要有特定的信号发生它就被调用.
信号处理函数由信号值这个单一的整数参数来调用,没有返回值.函数原型:
void handler(int signo);
(2)可以把某个信号的设定为SIG_IGN来忽略它SIGKILL和SIGSTOP不可以忽略
(3)把某个信号的设定为SIG_DFL来启动它的默认设置
由于sigaction函数调用复杂,UNP卷一中将其进行改进,通过signal函数去调用完善它。
signal函数原型:void (signal(int signo,void(func)(int)))(int);
typedef简化:typedef void Sigfunc(int);
变为:Sigfunc *signal(int signo,Sigfunc *func);
符合POSIX的系统的信号处理为以下几点:
- 安装信号处理函数后它会一直安装
- 信号处理函数运行期间,信号是阻塞的
- unix信号是默认不排队的,一个信号在被阻塞期间产生了一次或多次,那该信号被解阻塞后通常指递交一次
- 利用sigprocmask函数选择性地阻塞或解阻塞一组信号是可能的。
网友评论