首先理论理解一下
信号是一种“软件中断”处理机制。信号机制提供了处理异步事件的方法。
信号也叫软中断。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
内核代码中使用无符号长整型(32bit)编码信号,被定义在include/signal.h中
typedef unsigned int sigset_t; /* 32 bits */
#define _NSIG 32
#define NSIG _NSIG
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGUNUSED 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
do_signal函数是由内核系统 调用(int 0x80)中断处理程序中对信号的预处理程序
如下有个信号处理程序的调用方式
我们知道从用户态到内核态,cpu会压入上下文,如下