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 in 查询参数化

    mysql查询语句where条件in mysql查询语句where条件in 正常情况需要查询的语句:select *from temp where id in ('1','2','3','4','5' ...

  2. spring boot 项目无法访问静态页面

  3. 熟悉基本的Linux文件系统命令

      修改配置是以后工作中必然经历的,要做好基础工作,两天的学习也说明了在Linux系统中修改配置的重要性,多看多学习. 每周总结学习和经验到网站上,坚持1w个小时,加油! Linux的安装环境 cen ...

  4. 转-软件测试人员在工作中如何运用Linux

    从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到. 对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux ...

  5. Java+opencv实现人脸检测

    版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...

  6. MySQL:日期函数、时间函数总结(MySQL 5.X)

    http://www.cnblogs.com/she27/archive/2009/01/16/1377089.html 原文:http://www.51sdj.com/phpcms/picture/ ...

  7. Python服务Dokcer化并k8s部署实例

    这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程. 服务介绍Docker化设计业务代码改造创建docker镜像K8S部署设计yaml文件运行服务介绍这是一个用 pyth ...

  8. websocket 11

    1. websocket 回顾: - 什么是轮训? - 通过定时器让程序每隔n秒执行一次操作. - 什么是长轮训? - 浏览器向后端发起请求,后端会将请求 hang 住,最多hang 30s. 如果一 ...

  9. Centos6.8通过yum安装mysql5.7 centos7.5适用

    1.安装mysql的yum源 a.下载配置mysql的yum源的rpm包 根据上面3张图片中的操作下载下来的rpm文件可以通过如下命令获取: wget https://dev.mysql.com/ge ...

  10. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...