linux的trap命令是干什么的 (linux系统trace命令)

概述

今天主要介绍一个trap命令,这个命令是用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。

linux系统管理入门,linux系统traceroute命令

01

关于信号

历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀。

kill和trap等都可以看到信号编号及其关联的名称。“信号”是指那些被异步发送到一个程序的事件。默认情况下,它们通常会终止一个程序的运行。

运行Shell脚本时,如果按下快捷键Ctrl+c或Ctrl+x(x为其他字符),程序就会终止运行,

在有些情况下,我们并不希望Shell脚本在运行时被信号中断,此时就可以使用屏蔽信号手段,让程序忽略用户输入的信号指令,从而继续运行Shell脚本程序。

linux系统管理入门,linux系统traceroute命令

简单的说,Linux的信号是由一个整数构成的异步消息,它可以由某个进程发给其他的进程,也可以在用户按下特定键发生某种异常事件时,由系统发给某个进程。

02

信号列表

在Linux下和信号相关的常见命令为kill和trap命令,执行kill -l或trap -l命令,可以列出系统支持的各种信号,多达64个

# trap -l

linux系统管理入门,linux系统traceroute命令

下列表示Linux系统中重要的信号

linux系统管理入门,linux系统traceroute命令

03

trap 的使用

1、运行格式

trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。

trap command signal

它有三种形式分别对应三种不同的信号回应方式。

第一种:

trap "commands" signal-list

当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。

第二种:

trap signal-list

trap不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行。

第三种:

trap " " signal-list

trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种。

ps:脚本程序通常是以从上到下的顺序解释执行的,所以必须在你想保护的那部分代码以前指定trap命令。

2、测试

这里屏蔽HUP INT QUIT TSTP几个信号,执行命令:

# trap "" HUP INT QUIT TSTP

这个时候,可以试试打开一个持续的命令,然后中断其运行,例如:

# tail -f /var/log/messages

接着,试试用Ctrl+C 或 Ctrl+\ 来中断试试,会程序是不会退出的。

3、恢复信号

如果想恢复的话,可以用Ctrl+Z把程序放到后台,然后运行:

# trap : HUP INT QUIT TSTP

然后,用ps -ef看看其PID号,bg 1让程序继续运行,最后用kill 杀掉即可。

linux系统管理入门,linux系统traceroute命令

利用trap命令我们还可以实现跳板机,篇幅有限,这个后面在单独介绍,感兴趣的朋友可以关注一下~

linux系统管理入门,linux系统traceroute命令