日度归档:2015年5月25日

linux c接收信号

阅读<<深入理解计算机系统>>
当内核从一个异常处理程序返回,准备将控制传给进程时,它会检查未被阻塞的待处理信号的集合。
如果这个集合为空,那么内核传递控制给当前进程的下一条指令;
如果这个集合为非空,那么内核选择集合中的最小的一个信号,接收内核返回的信号,收到这个信号会触发进程的相应的行为,当完成相关行为后,进程将继续向下执行。每种信号都有对应的进程行为:
* 进程终止
* 进程终止并转存存储器
* 进程暂停直到被信号重新唤起
* 进程忽略该信号
以上是信号所对应的系统默认行为。例 按住Ctrl+C 向进程发送终止信号,当内核接收到信号后,就返回给当前进程,触发默认的进程终止事件。
在linux中还可以通过函数signal修改信号的默认行为(SIGSTOP SIGKILL信号除外)。


signal函数简介
使用signal函数需要引入头文件 #include < signal.h>
handler_t *signal(int signum,handler_t *handler);
函数参数说明:
当handler参数为 SIG_IGN 那么内核将忽略signum信号;
当handler参数为 SIG_DFL 那么内核将执行signum所对应的默认行为;
当handler为用户定义的函数时,此时函数就称为信号处理函数,当进程接收到signum信号时,将调用用信号处理函数,信号处理程序的调用称为捕捉信号,信号处理函数的执行称为处理信号;
返回值:
返回一个函数指针的地址

例:

signal