Shell 语法之信号与作业
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 语法之信号与作业的更多相关文章
- 26 bash shell中的信号
当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM(发送到进程的 TERM 信号用于要求进程终止) 和 SIGQUIT(当用户要求进程执行 core dump 时,QUIT 信 ...
- makefile中的shell语法
在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是 ...
- Hadoop学习笔记之HBase Shell语法练习
Hadoop学习笔记之HBase Shell语法练习 作者:hugengyong 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令 ...
- Shell语法规范
ver:1.0 博客:https://www.cnblogs.com/Rohn 本文介绍了Shell编程的一些语法规范,主要参考依据为谷歌的Shell语法风格. 目录 背景 使用哪一种Shell 什么 ...
- shell语法习题练习进阶版
第4章 shell语法深度习题练习 4.1 使用if,case,函数的方法将服务改成system(centos6) 4.1.1 if方法 4.1.1.1 system实现 4.1.1.1.1 编写代码 ...
- 读完学会shell语法,shell脚本80%已经学会
第3章 shell语法讲解 3.1 shell运算讲解 3.1.1 运算符的讲解 3.1.2 shell运算方式的讲解 3.1.2.1 $(())运算 [root@m01 test_init] # a ...
- Shell 语法之结构化命令(流程控制)
许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...
- shell语法基础
一.变量 1.linux大小写敏感,变量取名要注意大小写.可以通过变量名前面加$来访问变量的内容.可以通过使用read命令来将用户输入的值赋给一个变量. 2.给变量赋值时,如果字符串中包含空格,就必须 ...
- shell——trap捕捉信号(附信号表)
trap捕捉信号有三种形式 第一种:trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例 ...
随机推荐
- py测试一个Socket实例
本实例旨在了解py和socket的一些相关知识. 1.服务器端搭建py监听程序. 在客户端搭建python,linux默认自带了python2.7,先不管安装了. 接着编写socket程序,可以在本地 ...
- EL fmt标签
c:formate 表达式需要传入的对象为date
- 在Laravel5.4中自动加载自定义文件
目标:想要在TestController.php中使用自定义的/app/Common/test.php中的test()函数. 1.在app文件夹下创建文件app/Common/test.php,文件内 ...
- 修改 ulimit 参数
sudo vim /etc/security/limits.conf 文件下加: * hard nofile 999999 * soft nofile 999999 * soft nproc 1024 ...
- 搞笑:我是我们村唯一一个搞IT的!
出自:http://codebay.cn/post/8033.html 当我跟村里人提起我是IT工程师时 他们内心是这样想的 ▼ 也有的朋友这样想 ▼ 爸爸问我,什么狮? ▼ 妈妈问我,工什么? ▼ ...
- Java学习之程序运行机制
Java的运行机制是:先编译,后解释. 典型的编译型编程语言是:C和C++. eg:用c语言编写的*.c文件编译生成*.h文件,通过链接将*.h文件链接成*.exe文件,然后就可以运行,编译型的高级语 ...
- appium基础一:连接手机和appium-desktop定位元素
一.获取手机信息 adb devices获取手机或模拟器的设备名 aapt dump badging xxxx.apk获取app的包名.入口等基本信息 如果想要知道手机原生携带的app的基本信息,首先 ...
- shell脚本练习06
######################################################################### # File Name: -.sh # Author ...
- Activiti流程图查看
1.测试用例查看图片 public void viewImage() throws Exception { // 创建仓库服务对对象 RepositoryService repositoryServi ...
- Python-进程(2)
目录 进程互斥锁 队列 堆栈 IPC(进程间通信) 生产者与消费者模型 进程互斥锁 通过之前的学习,我们千方百计的实现了程序的异步,让多个任务可以同时在几个进程中并发处理 他们之间的运行没有顺序,一旦 ...