首页 > 代码库 > Linux shell 信号继承
Linux shell 信号继承
shell中,向进程发送信号多多通过ctrl键加上一些功能键来实现,这里是常见的Ctrl组合键及其意义:
组合键 | 信号类型 | 意义 |
Ctrl+C | INT信号,即interrupt信号 | 停止运行当前的作业 |
Ctrl+Z | TSTP信号,即terminal stop信号 | 使当前作业暂时停止(转入阻塞状态) |
Ctrl+\ | QUIT信号 | Ctrl+C信号的强化版本,当Ctrl+C无法停止作业试,使用该组合键 |
Ctrl+Y | TSTP信号,即terminal stop信号 | 当进程从终端读取输入数据是,暂时停止该进程 |
子she‘ll能继承父she‘ll所忽略的信号,但是不能继承父she‘llwei未忽略的信号,我们举例来论证这一观点,创建两个脚本forever.sh和subsig.sh,forever.sh内容如下:
#forever.sh演示无限循环等待 #!/bin/bash while :; do #冒号相当于true. sleep 5 done
forever.sh脚本是提供subsig.sh脚本调用创建子shell的,功能就是无限循环,每次循环睡5秒,即forever.sh脚本永远不会停止,除非被kill命令杀掉。subsig.sh内容如下:
#!/bin/bash trap "" QUIT #忽略QUIT信号 trap "echo ‘You want to kill me‘" TERM #捕捉到TERM信号后打印提示信息 ( ./forever.sh #将forever.sh脚本作为子shell,子shell将无限休眠 )
subsig.sh使用了两次trap命令,将QUIT信号忽略,但是不忽略TERM信号,捕捉到TERM信号后,需要打印提示信息,然后利用圆括号建立子shell,下面是父子shell处理QUIT和TERM信号的测试过程:
[wandl@TestMachine2 shellScript]$ ./subsig.sh & #运行subsig.sh脚本 [1] 5118 #返回父shell作业号和进程号 [wandl@TestMachine2 shellScript]$ kill -3 5118 #向父she‘ll发送3号信号,即QUIT信号 [wandl@TestMachine2 shellScript]$ ps -a #父shell未退出,说明QUIT信号被忽略 PID TTY TIME CMD 3822 pts/0 00:00:00 su 3830 pts/0 00:00:00 bash 3868 pts/0 00:00:00 su 3869 pts/0 00:00:00 bash 4037 pts/0 00:00:00 vim 4038 pts/0 00:00:00 vim 4418 pts/0 00:00:00 traploop.sh 4499 pts/0 00:00:00 sleep 5118 pts/0 00:00:00 subsig.sh 5119 pts/0 00:00:00 forever.sh 5123 pts/0 00:00:00 sleep 5124 pts/0 00:00:00 ps [wandl@TestMachine2 shellScript]$ kill -3 5119 #向子shell发送3信号,即QUIT信号 [wandl@TestMachine2 shellScript]$ ps -a #子shell也未退出,说明QUIT信号也被忽略 PID TTY TIME CMD 3822 pts/0 00:00:00 su 3830 pts/0 00:00:00 bash 3868 pts/0 00:00:00 su 3869 pts/0 00:00:00 bash 4037 pts/0 00:00:00 vim 4038 pts/0 00:00:00 vim 4418 pts/0 00:00:00 traploop.sh 4499 pts/0 00:00:00 sleep 5118 pts/0 00:00:00 subsig.sh 5119 pts/0 00:00:00 forever.sh 5128 pts/0 00:00:00 sleep 5129 pts/0 00:00:00 ps [wandl@TestMachine2 shellScript]$ kill 5118 #向父shell发送TERM信号 [wandl@TestMachine2 shellScript]$ ps -a #父shell仍未被杀掉 PID TTY TIME CMD 3822 pts/0 00:00:00 su 3830 pts/0 00:00:00 bash 3868 pts/0 00:00:00 su 3869 pts/0 00:00:00 bash 4037 pts/0 00:00:00 vim 4038 pts/0 00:00:00 vim 4418 pts/0 00:00:00 traploop.sh 4499 pts/0 00:00:00 sleep 5118 pts/0 00:00:00 subsig.sh 5119 pts/0 00:00:00 forever.sh 5133 pts/0 00:00:00 sleep 5134 pts/0 00:00:00 ps [wandl@TestMachine2 shellScript]$ kill 5119 #向子shell发送TERM信号 [wandl@TestMachine2 shellScript]$ Terminated #子shell立刻被终止 You want to kill me! #并打印出父shell对TERM信号的相应信息 [1]+ Exit 143 ./subsig.sh #父shell随着子shell的终止而终止 [wandl@TestMachine2 shellScript]$
Linux shell 信号继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。