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. python学习之路05

    控制流语句 博主认为所有的语言中,控制语句都是差不多的,无非就是循环,判断,if ,while,for.更重要的是,多加的练习,实战中发现自身问题,加深巩固 所以,下面会以实际的题目为主. 1.用户在 ...

  2. 19/03/13python学习笔记

    1.变量命名 name1 = 1 name2 = "sunj" 2.命名变量的规则 (1.变量是字母.数字.下划线的组合(2.不能以数字开头(3.不能用关键词命名变量(4.变量中间 ...

  3. Go Example--状态协程

    package main import ( "fmt" "math/rand" "sync/atomic" "time" ...

  4. Eclipse 使用 VS Emulator for android 调试环境配置 步骤

    模拟器启动器地址:C:\Program Files (x86)\Microsoft Emulator Manager\1.0\emulatorcmd.exe 获取模拟器ID命令:emulatorcmd ...

  5. 在线HTML编辑器KindEditor

     简介 KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器.KindEdi ...

  6. 2、php中字符串单引号好和双引号的区别

    使用单引号和双引号的主要区别是:单引号定义的字符串中出现的变量和转义序列不会被变量的值代替,而双引号中使用变量名会显示该变量的值.

  7. C 栈实现队列节点的管理

    栈预先存储节点,队列的malloc/free均有栈模拟,从而保证不频繁的开辟/是否节点内存. #include "com_is_buf.h" #include "com_ ...

  8. Python中的闭包 - Closure

    Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西. 闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个 ...

  9. 理解OpenShift(3):网络之 SDN

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  10. nginx支持ipv6

    今天碰到的问题是nginx对于ipv6的请求没有日志,顺便查了一下,nginx对ipv6的支持. nginx -v查看nginx是否支持ipv6,出现--with-ipv6,则是支持nginx的,否则 ...