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 信号继承的更多相关文章

  1. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  2. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

  3. [转]linux shell数据重定向(输入重定向与输出重定向)详细分析

      在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...

  4. Linux Shell系列教程之(十二)Shell until循环

    本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...

  5. linux kill信号列表

    linux kill信号列表 $ kill -l1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL5) SIGTRAP      6) ...

  6. (linux shell)第一章--小试牛刀(上)

    来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...

  7. linux —— shell 编程(编程语法)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...

  8. linux —— shell 编程(整体框架与基础笔记)

    导读 关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念.命令与操作做一个简要的记录,以备方便查找. (本文所有语 ...

  9. Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1

    linux空设备文件和重定向 输出/输入重导向 >      >>   <   <<   :>   &>   2&>   2< ...

随机推荐

  1. libnids-1.24 使用源码问题

    从网上下载libnids-1.24源码包,解压后./configure安装. 会出现提示 checking for GLIB... configure: error: Package requirem ...

  2. jq 绑定事件和解绑事件

    <!DOCTYPE html><html><head> <script src="http://cdn.static.runoob.com/libs ...

  3. Linux下使用Nginx代理访问json文件报404错误

    在网上看了很多,都说是IIS的问题,关键是使用servlet就可以正常访问,使用Nginx就不行,最后发现是其他问题,解决方案如下: 1.确认配置的路径是否正确,Nginx代理的路径和你访问的路径. ...

  4. some working learning总结学习

    1. Python通过pypyodbc访问Access数据库 https://blog.csdn.net/jisuanjiguoba/article/details/73163721 2. java大 ...

  5. 1.golang的环境搭建及入门

    安装包下载 下载链接:https://dl.google.com/go/go1.12.3.windows-amd64.msi 环境搭建 安装完成之后,找一个来存放go语言文件的文件夹,我这里选的是G: ...

  6. Linq分组查询统计

    这里介绍Linq使用Group By和Count得到每个CategoryID中产品的数量,Linq使用Group By和Count得到每个CategoryID中断货产品的数量等方面. 学经常会遇到Li ...

  7. win10的linux子系统安装及使用

    最近需要用到linux但是又不想装双系统,正好win10推出了linux子系统,省事了,自己也是煞费苦心才整明白 1.首先你要是很新的win10版本(1607及已上),这样才有下面的步骤 依次在 设置 ...

  8. 第五节《Git基本操作》

    我们给原来的数据打一个tag(标签),专业术语叫做“里程碑”,我们先不介绍里程碑的奥秘,只要知道里程碑无非也是一个引用而已. [root@git demo]# pwd/git/my/workspace ...

  9. Dynamics 365 CRM 添加自定义按钮

    在添加自定义按钮之前,我们需要下载这个工具 RibbonWorkbench, 它是专门针对自定义命令栏和Ribbon区域. 下载之后是一个zip压缩包. 怎样安装RibbonWorkbench: Se ...

  10. LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector

    题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...