bash处理信号
发送信号
kill
格式:kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
可以发送进程号为pid的进程,也可以发送作业号为jobspec的进程
sigspec可以是信号数字也可以是信号名,信号名可以不带SIG
kill命令默认发送SIGTERM信号,接收到SIGTERM信号的进程会结束运行
终端中,Ctrl+C给前台进程发送INT信号,进程退出,退出状态为130,为信号编号加128
处理信号
建立信号回调函数
trap cmd signal1 signal2 signal3 ...
cmd可以是一系列命令或一个函数的名字,也可以为空,将执行默认行为
Shell脚本编程感兴趣的信号
信号 |
对应ID |
行为 |
含义 |
SIGHUP |
1 |
Term |
Hangup detected on controlling terminal |
SIGINT |
2 |
Term |
Interrupt from keyboard |
SIGQUIT |
3 |
Core |
Quit from keyboard |
SIGKILL |
9 |
Term |
Kill signal |
SIGALRM |
14 |
Term |
Timer signal |
SIGTERM |
15 |
Term |
Termination signal |
Shell脚本有个假的信号0,在退出时产生,可以为这个信号定义函数使脚本结束时执行某些操作
多次为同一个信号定义操作,以最后一次为准
忽略信号
在trap中使用空字符串或冒号就行。
trap ‘ ‘ 2 //注意引号的存在
设置定时器
其实就是设置一个后台的子进程在睡眠一定事件后给本进程发送SIGALARM信号。
方式:sleep $time && kill -s 14 $$ &
此命令产生bash子进程后,由bash子进程产生sleep进程。
在注销定时器时注意杀死进程的顺序,贸然杀了父进程,就找不到子进程了哦
本文出自 “重剑无锋” 博客,请务必保留此出处http://qianyang.blog.51cto.com/7130735/1620558
原文地址:http://qianyang.blog.51cto.com/7130735/1620558