#每日Linux小练习#09 trap指令

在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用到了信号处理。

trap命令用来指定shell需要捕捉哪些Linux信号,以及如何处理这些信号。格式如下:

trap commands signals

不同的signal之间用空格隔开,commands表示如何处理signals。

echo trap "echo sorry, I have trapped Ctrl-C" SIGINT SIGTERM
trap "echo sorry, I have trapped Ctrl-C" SIGINT SIGTERM
echo "Running..."

count=1
while [ $count -le 5 ]
do
    echo "Loop  $count"
    count=$(($count + 1))
    sleep 2
done

echo trap - SIGINT SIGTERM
trap - SIGINT SIGTERM   #移除捕捉

echo "Ending..."

上述脚本在每次检测到SIGINT或者SIGTERM信号时,简单地显示一行信息,然后继续向下执行,而并不会终止程序。

如果trap命令的signals部分变为”EXIT”会如何呢?此时无论脚本是否正常退出,shell都会在程序终止时执行commands部分:

echo " "
echo trap "echo this loop ends" EXIT
trap "echo this loop ends" EXIT
echo "Running..."

count=1
while [ $count -le 5 ]
do
    echo "Loop  $count"
    count=$(($count + 1))
    sleep 2
done

echo "Ending..."

本文中代码可以从github上面下载,https://github.com/yifeng152/oneShellPracticePerDay.git

对应文件为20150811trap.sh

参考链接:

http://blog.sina.com.cn/s/blog_460757d50100v0ox.html
http://www.cnblogs.com/benxintuzi/p/4720647.html

时间: 2025-01-06 23:47:10

#每日Linux小练习#09 trap指令的相关文章

#每日LinuxShell小练习#04 find指令

今天对find指令进行练习 原材料来源于http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 这个是find的基本公式 1.基本形式 find path -option 如果有两个以上的选择,则使用 -o -a -o 是或者的意思 -a 是而且的意思 比如: #!/bin/ba

#每日Linux小练习#12进程的详细分析

经常被问到进程和线程的区别,今天对进程进行详细的分析讨论. 一.进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. 二.进程与程序的区别 程序时静态的,它是一些保存 在磁盘上得指令的有序集合,没有任何执行的概念. 进程是一个动态的概念,它是程序执行的过程,包括创建.调度和消亡. 三.linux系统中进程的表示 在linux系统中,进程由一个叫task_struct的结构体描述,也

#每日Linux小练习#11作业命令继续分析

在对比中发现不同 1.进程和作业的概念有所区别.一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令.例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程. 2.作业和bash是相关的,在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此之间具有相关性.比如无法使用job control的方式由tty1的环境去管理tty2的bash. 前台作业和后台作业 只有前台程序可以接受终端输入,后台作业试

#每日Linux小练习#06 Shell Script注意点总结

shell script优缺点分析 shell 使用的是外部的命令 与bash shell的一些默认工具,所以,它常常调用外部的函数库,因此,命令周期上面比不上传统的程序语言. 所以,Shell Script用在系统管理上面是很好的,但是在处理大量数值计算时,速度较慢. shell script编写的注意事项 1.如果一行内容太多,则可以使用 \[Enter] 来扩展至下一行 2.# 可以作为批注 如何执行Script 1.直接命令执行(要具有可读可执行的权限) 绝对路径,相对路径,变量PATH

老男孩教育每日一题-第69天-shell脚本知识点:linux系统脚本中trap信号都有哪些,如何进行使用?

题目 shell脚本知识点:linux系统脚本中trap信号都有哪些,如何进行使用? 参考答案: [trap信号命令说明] trap命令用于指定在接收到信号后将要采取的行动,trap命令的一种常见用途是在脚本程序被中断时完成清理工作.历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀.可以在命令提示符下输入命令trap -l来查看信号编号及其关联的名称. [trap信号命令

每日linux命令学习-引用符号(反斜杠\,单引号'',双引号"")

引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(''),双引号(""). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要用于信息的原样输出,防止任何变量的扩展,双引号(软转义)允许变量扩展.转义符和命令替换.单引号保护双引号,双引号保护单引号. 1. 反斜杠 反斜杠通过解析器将1个字符转化为引用符号或转义. 1)在单引号内使用反斜杠,反斜杠不会被解析,保持原样输出. 2)在双引号内使用反斜杠,主要用于美元符

Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程

Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式 2016/12/220 Comments ######### # top -b -o +%CPU | head -n 22top - 21:02:00 up 2:34, 9 users, load average: 0.10, 0.08, 0.11Tasks: 190 total, 1 running, 189 sleeping, 0 stopped, 0 zombie%Cpu(s): 3.2 us, 2.2 sy,

Linux小命令(1)yum

Linux命令(1)yum 使用最简易安装CentOS后.开启了网卡基本就可以使用yum在Linux中下载安装软件了.Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE.CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装. 命令格式如下: #yum [options] [command] [package ...] 常用命令: #yum grouplikst 查询可能批量安

正确使用‘trap指令’实现Docker优雅退出

一般应用(比如mariadb)都会有一个退出命令,用户使用类似systemctl stop ****.service方法,停止其服务时,systemd会调用其配置文件注册的退出命令,该命令执行清理资源.退出集群.输出必要日志等操作后才杀死自己的进程:在系统shutdown的时候也会有类似的流程,最大程度的保证应用正常退出,下面我们称之为"进程优雅退出". 将应用Docker化后,一个突出的问题是,如何让进程优雅的退出,而不是强行杀死进程.Docker stop和Docker kill分