Shell使用Linux信号

一、信号简介

有时候,你在Linux运行一个脚本,它陷入了出乎意料的循环,这时,你想要终止它而不用关掉整个Linux系统,我想大家都会想到了一个命令Ctrl + C。

Linux系统和应用程序可以产生超过30个信号,使用命令kill -l可以查看信号列表,其中1-31是普通信号(非可靠信号),34-64是实时信号(可靠信号):

下面列举几个常见的信号:

默认情况下,shell会将这些传给shell脚本程序来处理,而shell脚本默认的行为是忽略这些信号,有时候不太利于脚本的运行,为了避免这种情况,我们可以在脚本中加入识别、处理信号的命令。

二、信号产生

bash shell允许在键盘上的键组合生成两种基本的Linux信号,分别是终止进程和暂停进程。

1.终止进程

Ctrl + C 会生成SIGINT信号,并将其发送给shell中当前运行的所有进程。它会停止shell中运行的进程。

2.暂停进程

Ctrl + Z 会生成SIGTSTP信号,在进程运行中间暂停它,而不是终止,这个还是会有一些危险,例如这个进程正打开了一个关键的系统文件的文件锁。停止进程会让程序继续保留在内存中,并能从上次停止的位置继续运行。

三、捕捉信号

脚本可以选择不忽略信号,在信号出现时捕捉他们并执行其他的命令。我们使用trap命令来指定shell脚本观察并拦截哪些Linux信号,如果脚本收到了trap命令中列出的信号,它会阻止它被shell处理,而是在本地进行处理。

trap的命令格式:

Trap commands signals

这里的信号可以使用数值或者Linux信号名来指定。

下面举一个例子(忽略SIGINT和SIGTERM):

四、捕捉脚本的退出:

只需要在trap命令后面加上EXIT信号就行。

五、移除捕捉

移除捕捉也是使用trap命令,中间的commands 使用“-”代替。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值