信号产生场景
终端按键
非法内存操作
硬件故障
从用户态切换到内核态
信号处理方式
执行默认操作
忽略
捕捉
[root@localhost /]# kill -l
1 ~ 31是不可靠信号(普通信号),34 ~ 64信号是可靠信号(实时信号)。1 ~ 31从Unix借鉴而来,有具体对应的系统事件, 34 ~ 64为后期扩充。没有32、33信号。
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如 #define SIGHUP 1 等。
信号详解
[root@localhost /]# man 7 signal
1) SIGHUP:当退出Shell时,由该Shell启动的所有进程将收到这个信号。默认动作为终止进程。
2) SIGINT:当按下组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。
3) SIGQUIT:当按下组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。
4) SIGILL:CPU检测到某进程执行了非法指令。默认动作为终止进程并产生core文件。
5) SIGTRAP:该信号由断点指令或其他trap指令产生。默认动作为终止里程 并产生core文件。
6) SIGABRT:调用abort函数时产生该信号。默认动作为终止进程并产生core文件。
7) SIGBUS:非法访问内存地址,包括内存对齐出错。默认动作为终止进程并产生core文件。
8) SIGFPE:在发生致命的运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等所有的算法错误。默认动作为终止进程并产生core文件。
9) SIGKILL:无条件终止进程,不能被阻塞、处理和忽略,它向系统管理员提供了可以杀死任何进程的方法。默认动作为终止进程。
10) SIGUSR1:用户自定义的信号,可以在程序中定义并使用该信号。默认动作为终止进程。
11) SIGSEGV:指示进程进行了无效内存访问。默认动作为终止进程并产生core文件。
12) SIGUSR2:另一个用户自定义信号,可以在程序中定义并使用该信号。默认动作为终止进程。
13) SIGPIPE:Broken pipe向一个没有读端的管道写数据。默认动作为终止进程。
14) SIGALRM:定时器超时,超时的时间由系统调用alarm设置。默认动作为终止进程。
15) SIGTERM:程序结束信号,与SIGKILL不同的是,该信号可以被阻塞和终止,通常用来表示程序正常退出。执行Shell命令kill时,缺省产生这个信号。默认动作为终止进程。
16) SIGSTKFLT:Linux早期版本出现的信号,现仍保留向后兼容。默认动作为终止进程。
17) SIGCHLD:子进程结束时,父进程会收到这个信号。默认动作为忽略这个信号。
18) SIGCONT:如果进程已停止,则使其继续运行。默认动作为继续/忽略。
19) SIGSTOP:停止进程的执行,不能被忽略,处理和阻塞。默认动作为终止进程。
20) SIGTSTP:当用户按下组合键时,停止终端交互进程的运行。默认动作为暂停进程。
21) SIGTTIN:后台进程读终端控制台。默认动作为暂停进程。
22) SIGTTOU:该信号类似于SIGTTIN,在后台进程要向终端输出数据时发生。默认动作为暂停进程。
23) SIGURG:Socket套接字上有紧急数据时,向当前正在运行的进程发出些信号,报告有紧急数据到达,如网络带外数据到达。默认动作为忽略该信号。
24) SIGXCPU:进程执行时间超过了分配给该进程的CPU时间 ,系统产生该信号并发送给该进程。默认动作为终止进程。
25) SIGXFSZ:超过文件的最大长度设置。默认动作为终止进程。
26) SIGVTALRM:虚拟时钟超时时产生该信号,类似于SIGALRM,但是该信号只计算该进程占用CPU的使用时间。默认动作为终止进程。
27) SGIPROF:类似于SIGVTALRM,它不仅包括该进程占用CPU时间还包括执行系统调用时间。默认动作为终止进程。
28) SIGWINCH:窗口变化大小时发出。默认动作为忽略该信号。
29) SIGIO:此信号向进程指示发出了一个异步IO事件。默认动作为忽略。
30) SIGPWR:关机。默认动作为终止进程。
31) SIGSYS:无效的系统调用。默认动作为终止进程并产生core文件。
34)SIGRTMIN ~ 64)SIGRTMAX:Linux的实时信号,它们没有固定的含义(由用户自定义)。所有的实时信号的默认动作都为终止进程。 在以上信号中, 程序不可捕获、阻塞或忽略的信号有: SIGKILL,SIGSTOP 不能恢复至默认动作的信号有: SIGILL,SIGTRAP 默认会导致进程流产的信号有: SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ 默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM 默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU 默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH 此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞。