Linux 使用信号与系统上运行的进程进行通信。

Linux 编程中最常见的 Linux 系统信号

信号   值        描述

1     SIGHUP    挂起进程

2     SIGINT     中断进程

3     SIGQUIT   停止进程

9     SIGKILL    无条件终止进程

15   SIGTERM   如果可能的话终止进程

17   SIGSTOP   无条件停止,但不终止进程

18   SIGTSTP   停止或暂停进程,但不终止它

19   SIGCONT    重新启动停止的进程

默认情况下,bash shell 会忽略它接收的任何 SIGQUIT 和 SIGTERM 信号。

中断进程

Ctrl + C 组合键可以生成 SIGINT 信号

暂停进程

Ctrl +Z 组合键生成 SIGTSTP 信号

捕获信号

trap 命令可以指定能够通过 shell 脚本监控和拦截 Linux 信号。如果脚本收到在 trap 命令中列出的信号,它将保护该信号不被 shell 处理,并在本地处理它。

格式:

trap commands signals

示例

#!/bin/bash
# testing output in a background job

trap "echo Haha" SIGINT SIGTERM
echo "This is a test program"
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 10
count=$[ $count + 1 ]
done
echo "This is the end of the test program"

在用户试图使用 bash shell 键盘 CTRL+ C 命令停止程序时,脚本将不受影响。

[root@tang sh13]# ./test1
This is a test program
Loop #1
Haha
Loop #2
Haha
Loop #3
Loop #4
Loop #5
Haha
Loop #6
Loop #7
Loop #8
Loop #9
Loop #10
This is the end of the test program

捕获脚本退出

要捕获 shell 脚本 退出,只需要向 trap 命令添加 EXIT 信号。

示例

#!/bin/bash
# trapping the script exit

trap "echo byebye" EXIT

count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 3
count=$[ $count + 1 ]
done

[root@tang sh13]# ./test2
Loop #1
byebye

移除捕获

要移除捕获,使用破折号(-)作为命令和想要恢复正常行为的信号列表

示例

#!/bin/bash
# removing a set trap

trap "echo byebye" EXIT

count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 3
count=$[ $count + 1 ]
done
trap - EXIT
echo "I just removed the trap"

[root@tang sh13]# ./test3
Loop #1
Loop #2
Loop #3
Loop #4
Loop #5
I just removed the trap

作业控制

作业控制的关键命令是 jobs 命令

示例

#!/bin/bash
# testing job control

echo "This is a test program $$"
count=1

while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 10
count=$[ $count + 1 ]
done
echo "This is the end of the test program"

[root@tang sh13]# ./test4
This is a test program 7049
Loop #1
Loop #2

[2]+ Stopped ./test4
[root@tang sh13]# jobs
[1]- Stopped ./test4
[2]+ Stopped ./test4

重启停止的作业

要以后台模式重新启动作业,使用带有编号的 bg 命令

[root@tang sh13]# bg 1
[1]- ./test4 &
[root@tang sh13]# Loop #2
Loop #3
Loop #4

...

要以前台模式重新启动作业,使用带有编号的 fg 命令

[root@tang sh13]# fg 2
./test4
Loop #3
Loop #4

...

Shell 语法之信号与作业的更多相关文章

  1. 26 bash shell中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM(发送到进程的 TERM 信号用于要求进程终止) 和 SIGQUIT(当用户要求进程执行 core dump 时,QUIT 信 ...

  2. makefile中的shell语法

    在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是 ...

  3. Hadoop学习笔记之HBase Shell语法练习

    Hadoop学习笔记之HBase Shell语法练习 作者:hugengyong 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令 ...

  4. Shell语法规范

    ver:1.0 博客:https://www.cnblogs.com/Rohn 本文介绍了Shell编程的一些语法规范,主要参考依据为谷歌的Shell语法风格. 目录 背景 使用哪一种Shell 什么 ...

  5. shell语法习题练习进阶版

    第4章 shell语法深度习题练习 4.1 使用if,case,函数的方法将服务改成system(centos6) 4.1.1 if方法 4.1.1.1 system实现 4.1.1.1.1 编写代码 ...

  6. 读完学会shell语法,shell脚本80%已经学会

    第3章 shell语法讲解 3.1 shell运算讲解 3.1.1 运算符的讲解 3.1.2 shell运算方式的讲解 3.1.2.1 $(())运算 [root@m01 test_init] # a ...

  7. Shell 语法之结构化命令(流程控制)

    许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...

  8. shell语法基础

    一.变量 1.linux大小写敏感,变量取名要注意大小写.可以通过变量名前面加$来访问变量的内容.可以通过使用read命令来将用户输入的值赋给一个变量. 2.给变量赋值时,如果字符串中包含空格,就必须 ...

  9. shell——trap捕捉信号(附信号表)

    trap捕捉信号有三种形式 第一种:trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例 ...

随机推荐

  1. dart中的typedef <函数别名>

    typedef定义如下: typedef 给某一种特定的函数类型起了一个名字,可以认为是一个类型的别名.或者这样理解: 自己定义了一种数据类型,不过这种数据类型是函数类型,按照这种类型实例化后的对象, ...

  2. SpringCloud学习笔记(六):Feign+Ribbon负载均衡

    简介 官网解释: http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign Feign是一个声明式WebS ...

  3. Ubuntu环境下安装Scala以及安装IntelliJ Scala插件(Plugin)

    一.Scala介绍 1.结合Spark处理大数据 这是Scala的一个主要应用,而且Spark也是那Scala写的. 2.Java的脚本语言版  可以直接写Scala的脚本,也可以在.sh直接使用Sc ...

  4. LUA中的冒号、点和self

    在Lua编程中,经常会看到有时用点号定义一个table的成员函数,有时却用冒号,在调用的时候也是如此.那么点号和冒号在使用上有什么区别呢?它们与self之间又是什么样的关系呢?稍安勿躁,接下来谜底将一 ...

  5. JavaWeb中请求转发和请求重定向的区别

    针对于JavaWeb中请求与重定向的一个cheatsheep: 1.转发 1)完成一次转发,用户浏览器发送一次请求 2)转发之后,浏览器URL地址栏不改变(服务器帮忙完成) 3)请求域中数据不丢失 4 ...

  6. Jsp Layout 布局页

    本文章仅用于知识记录 /WEB-INF/tags/layout.tag <%@ tag language="java" pageEncoding="UTF-8&qu ...

  7. 2016.9.15初中部上午NOIP普及组比赛总结

    2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...

  8. 廖雪峰Java13网络编程-3其他-2RMI远程调用

    1.RMI远程调用: Remote Method Invocation 目的:把一个接口方法暴露给远程 示例: 定义一个接口Clock,它有一个方法能够获取当前的时间,并编写一个实现类,来实现这个接口 ...

  9. MyEclipse如何使用debug模式

    知道如何打断点,如何进入debug与debug模式的视图,还有工具栏的使用和快捷键的使用 https://blog.csdn.net/menglanyingfei/article/details/55 ...

  10. LUOGU P2764 最小路径覆盖问题 (最小路径点覆盖)

    解题思路 有向图最小路径点覆盖问题,有这样的结论就是有向图最小路径点覆盖等于n-拆点二分图中最大匹配.具体怎么证明不太知道..输出方案时找到所有左部未匹配的点一直走$match​$就行了. #incl ...