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. MYSQL之IFNULL

    IFNULL是MYSQL中的一个判断字段值是否为null的函数,如果为null,则此查询可以变更为指定的值: 如 IFNULL(a,0)  如果a为null,则查询出0. 如果A表中没有数据 sele ...

  2. XML一

    HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言.                                  而XML(E ...

  3. 【Jmeter】api性能测试总结

    1.前提概念 平时常用的性能测试:api性能测试+场景性能测试:今天就说一说api性能测试 2.如何进行性能测试? 需求:对某api进行性能测试,看看最大承受的并发数,分析下图表 分析: 错误思路:当 ...

  4. 全志A33 lichee 搭建Qt App开发环境编写helloworld

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 Step 1 在虚拟机(Ce ...

  5. C# Restful 启用 Session

    虽然很多人说不建议启用,但我就是想启用. [ServiceContract(SessionMode=SessionMode.Allowed)] public interface IBIService ...

  6. vim 简单实用

    http://www.runoob.com/linux/linux-vim.html 编辑模式 : (同时打开两个文件) vim test.c test1.c -O     同时编辑两个文件    - ...

  7. debian系统下apache2开启ssi功能

    SSI (Server Side Include)的 html 文件扩展名 (.shtml), 通常称为"服务器端嵌入"或者叫"服务器端包含"说白了就是类似其他 ...

  8. 【java】final修饰符介绍

    final: 最终,作为一个修饰符特点:1.可以修饰类,函数,变量2.被final修的的类不能被继承.因此类用final修饰可以避免被继承,被子类重写功能.3.被final修饰的方法不可以被重写.4. ...

  9. c++11模拟boost元占位符placeholder

    准备实现meta programming的fold函数,发现自己缺少占位符实现,这样传入fold的transform op类(元函数)都不得不另外写个外覆类,其实我觉得没啥不好,简单直接,说实话干扰什 ...

  10. Node核心模块

    在Node中,模块主要分两大类:核心模块和文件模块.核心模块部分在 Node 源代码的编译过程中,编译进了二进制执行文件.在 Node 进启动时,部分核心模块就被直接加载进内存中,所以这部分核心模块引 ...