15.1-处理信号
Linux使用信号与系统上运行的进程进行通信。
可以使用这些信号控制Shell脚本的运行,只需要让shell脚本在接收到来自Linux系统的特定信号时执行命令即可。
1. 常用的Linux信号
编号 |
信号名称 |
缺省操作 |
解释 |
POSIX |
1 |
SIGHUP |
Terminate |
挂起控制终端或进程 |
是 |
2 |
SIGINT |
Terminate |
来自键盘的中断 |
是 |
3 |
SIGQUIT |
Dump |
从键盘退出 |
是 |
4 |
SIGILL |
Dump |
非法指令 |
是 |
5 |
SIGTRAP |
Dump |
跟踪的断点 |
是 |
6 |
SIGABRT |
Dump |
异常结束 |
是 |
6 |
SIGIOT |
Dump |
等价于SIGABRT |
是 |
7 |
SIGBUS |
Dump |
总线错误 |
是 |
8 |
SIGFPE |
Dump |
浮点异常 |
是 |
9 |
SIGKILL |
Terminate |
强迫进程终止 |
是 |
10 |
SIGUSR1 |
Terminate |
对进程可用 |
是 |
11 |
SIGSEGV |
Dump |
无效的内存引用 |
是 |
12 |
SIGUSR2 |
Terminate |
对进程可用 |
是 |
13 |
SIGPIPE |
Terminate |
向无读者的管道写 |
是 |
14 |
SIGALRM |
Terminate |
实时定时器时钟 |
是 |
15 |
SIGTERM |
Terminate |
进程终止 |
是 |
16 |
SIGSTKFLT |
Terminate |
协处理器栈错误 |
是 |
17 |
SIGCHLD |
Ignore |
子进程停止、结束或在被跟踪时获得信号 |
是 |
18 |
SIGCONT |
Continue |
如果已停止则恢复执行 |
是 |
19 |
SIGSTOP |
Stop |
停止进程执行 |
是 |
20 |
SIGTSTP |
Stop |
从tty发出停止进程 |
是 |
21 |
SIGTTIN |
Stop |
后台进程请求输入 |
是 |
22 |
SIGTTOU |
Stop |
后台进程请求输出 |
是 |
23 |
SIGURG |
Ignore |
套接字上的紧急条件 |
否 |
24 |
SIGXCPU |
Dump |
超过CPU时限 |
否 |
25 |
SIGXFSZ |
Dump |
超过文件大小的限制 |
否 |
26 |
SIGVTALRM |
Terminate |
虚拟定时器时钟 |
否 |
27 |
SIGPROF |
Terminate |
概况定时器时钟 |
否 |
28 |
SIGWINCH |
Ignore |
窗口调整大小 |
否 |
29 |
SIGIO |
Terminate |
I/O现在可能发生 |
否 |
29 |
SIGPOLL |
Terminate |
等价于SIGIO |
否 |
30 |
SIGPWR |
Terminate |
电源供给失败 |
否 |
31 |
SIGSYS |
Dump |
坏的系统调用 |
否 |
31 |
SIGUNUSED |
Dump |
等价于SIGSYS |
否 |
- 默认情况下,bash shell会忽略它接收的任何SIGQUIT信号、SIGTERM信号(以防止交互的shell意外终止)。但是,bashshell处理它收到的任何SIGHUP、SIGINT信号。
- 如果bash shell收到一个SIGHUP信号,它会退出。在退出之前,它将SIGHUP信号传递给shell启动的任意进程(如shell脚本)。收到SIGINT信号,shell会立即中断。Linux内核停止向shell提供CPU 上的处理时间。这种情况下,shell将SIGINT信号传递给由shell启动的人任意进程以通知它们这种情况。
- 默认的shell脚本行为将忽略这些信号,这样会对脚本运行产生不良影响。为避免这种情况发生,对脚本进行编程以识别信号,并执行命令以便脚本为信号结果做好准备。
2. 生成信号
所谓的选项就是跟在破折号后面的单个字母,它能改变命令的行为。三种在脚本处理选项的方法: