一、进程信号的概念
进程具备能够识别并处理信号的能力,这是进程内置功能的一部分。
当进程真正收到信号的时候,具备在合适的时候处理这个信号的能力。进程在信号产生到信号处理的这段时间有临时保存哪些信号已经发生了的能力。
信号的处理方式有三种:默认动作、忽略、自定义动作。
二、信号的产生
1、常用的信号解析
我们常用的信号就是 ctrl+c 了,可以及时地把我们的前台进程(在 Linux 中,一个终端一般只有一个 bash,每一次登陆只允许一个进程是前台进程,可以允许多个进程是后台进程)杀死。首先我们得到的结论是:ctrl+c 的信号是被我们的前台进程接收到了。
实际上,ctrl+c 被进程解释成了 2 号信号,也就是 SIGINT 中断信号。

这张表中,前 31 个信号是普通信号,后 31 个信号是实时信号,其中没有 32、33 号信号,共 62 种信号。
我们可以通过一些小办法来验证一下 ctrl+c 是 2 号信号:我们前面说过信号的处理方式有三种:默认动作、忽略、自定义动作。我们按下 ctrl+c 前台程序中断这就属于默认动作,我们可以使用一个系统调用接口来捕捉信号,设置成我们自定义的动作,这个系统调用接口就是 signal。
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
返回值:成功返回之前该信号的处理函数指针,出错返回 SIG_ERR。
signum:要处理的信号编号,参照上面的表。
handler:函数指针,指向处理信号的函数,这是自定义动作。其中默认动作:SIG_DFL,忽略:SIG_IGN。
















