信号(signal)是在特定事件发生时由操作系统向进程发送的消息。它一种软件中断,是进程间唯一的异步通信方式。
信号有很多,常见的有:
- SIGINT:在键盘按下<Ctrl+C>组合键后产生,默认动作为终止进程
- SIGQUIT:在键盘按下<Ctrl+\>组合键后产生,默认动作为终止进程
- SIGKILL:无条件终止进程。本信号不能被忽略、处理和阻塞。默认动作为终止进程。它向系统管理员提供了一种可以杀死任何进程的方法
- SIGALRM:定时器超时,超时的时间由系统调用alarm设置。默认动作为终止进程
- SIGCHLD:子进程结束时,父进程会收到这个信号。默认动作为忽略该信号
信号的捕捉和处理
信号的捕捉和处理由以下2个函数来完成,其中第一个函数也是由第二个函数实现的:
#include <signal.h>
sighandler_t signal(int signum, sighandler_t handler);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
参数signum指定信号的种类,比如SIGINT、SIGKILL等。
参数handler是一个函数指针,指定捕捉到该信号后的处理函数。
signal函数执行成功时