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
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脚本
[] #返回父shell作业号和进程号
[wandl@TestMachine2 shellScript]$ kill - #向父she'll发送3号信号,即QUIT信号
[wandl@TestMachine2 shellScript]$ ps -a #父shell未退出,说明QUIT信号被忽略
PID TTY TIME CMD
pts/ :: su
pts/ :: bash
pts/ :: su
pts/ :: bash
pts/ :: vim
pts/ :: vim
pts/ :: traploop.sh
pts/ :: sleep
pts/ :: subsig.sh
pts/ :: forever.sh
pts/ :: sleep
pts/ :: ps
[wandl@TestMachine2 shellScript]$ kill - #向子shell发送3信号,即QUIT信号
[wandl@TestMachine2 shellScript]$ ps -a #子shell也未退出,说明QUIT信号也被忽略
PID TTY TIME CMD
pts/ :: su
pts/ :: bash
pts/ :: su
pts/ :: bash
pts/ :: vim
pts/ :: vim
pts/ :: traploop.sh
pts/ :: sleep
pts/ :: subsig.sh
pts/ :: forever.sh
pts/ :: sleep
pts/ :: ps
[wandl@TestMachine2 shellScript]$ kill #向父shell发送TERM信号
[wandl@TestMachine2 shellScript]$ ps -a #父shell仍未被杀掉
PID TTY TIME CMD
pts/ :: su
pts/ :: bash
pts/ :: su
pts/ :: bash
pts/ :: vim
pts/ :: vim
pts/ :: traploop.sh
pts/ :: sleep
pts/ :: subsig.sh
pts/ :: forever.sh
pts/ :: sleep
pts/ :: ps
[wandl@TestMachine2 shellScript]$ kill #向子shell发送TERM信号
[wandl@TestMachine2 shellScript]$ Terminated #子shell立刻被终止
You want to kill me! #并打印出父shell对TERM信号的相应信息 []+ Exit ./subsig.sh #父shell随着子shell的终止而终止
[wandl@TestMachine2 shellScript]$
Linux shell 信号继承的更多相关文章
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
- Linux Shell 重定向与管道【转帖】
by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...
- [转]linux shell数据重定向(输入重定向与输出重定向)详细分析
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...
- Linux Shell系列教程之(十二)Shell until循环
本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...
- linux kill信号列表
linux kill信号列表 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) ...
- (linux shell)第一章--小试牛刀(上)
来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- linux —— shell 编程(整体框架与基础笔记)
导读 关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念.命令与操作做一个简要的记录,以备方便查找. (本文所有语 ...
- Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1
linux空设备文件和重定向 输出/输入重导向 > >> < << :> &> 2&> 2< ...
随机推荐
- 阿里云centos7使用yum安装mysql的正确姿势
yum快速安装mysql 新增yum源 rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 查看可用的 ...
- crontab 相关
修改编辑器 select-editor 查看服务状态 service cron status (linux下为crond ,ubuntu为cron) 1-59/2 1,10,12 * * * ...
- 在linux系统下运行jar包的命令如下
1.java -jar xxxxx.jar // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2.java -jar xxxxx.jar & //当 ...
- JS效果
多标签页效果 tab切换 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset ...
- 项目管理软件 GanttProject 节日表
项目管理软件 GanttProject 节日表 GanttProject 是一款项目管理软件,对比一些商业项目管理软件一点不差,有些还更强大,比如以下的节假日自动选择. 文件地址在:C:\Progra ...
- Centos6.5安装mariadb的坑坑
最近在看Ansible,<Ansible权威指南>,然后有个地方是搭建Web应用框架,有个服务器是安装Mariadb,找到官方文档,一直弄,总是报错,换个思路,下载rpm到本地,安装,然后 ...
- LOJ 3059 「HNOI2019」序列——贪心与前后缀的思路+线段树上二分
题目:https://loj.ac/problem/3059 一段 A 选一个 B 的话, B 是这段 A 的平均值.因为 \( \sum (A_i-B)^2 = \sum A_i^2 - 2*B \ ...
- 关于java做题时需要注意的事项
1.要熟悉eclipse的使用 2.用java提交时只能有一个public class 且类名只能为Main 3.提交时不能提交包名 4.提交时要将引入的包一起提交 5.虽然java提供了很多的函数, ...
- PHP批量保存图片到服务器再上传阿里云
/* * 批量传输产品主图到阿里云 */ public function transferImage(){ $num = 50; $p = isset($this->request->ge ...
- LiveBindings --- 把对象之间的属性绑定起来
有了 FireMonkey 框架,它不同于 VCL ,以往的数据感知控件不能放在它上面,所以 XE2 提供了 LiveBindings 功能作为替代方案.另外它也是个通用的基础设施,同样可用于传统的V ...