TRAP 收到信号后不立即执行的问题

今天写脚本的时候遇到一个trap不会立即触发的问题。

============bbb.sh======

#!/bin/bash

# traptest.sh

trap "echoBooh!;exit 0" TERM

trap "echo Booh!;exit 0" INT

echo "pid is$$"

sleep 600

===============

运行脚本,执行echo后进入睡眠。此时用ps -xjbbb.shsleep 600在同一个进程组TPGID

重新登入一个登录shell,向该bbb.sh发送INT新号:kill -INT PID或者发送kill -TERM PID

这时bbb.sh会捕捉到这个新号,但是不会立即执行trap表中的程序(echo Booh!;exit 0),而是等到sleep 600这个子进程结束之后才会执行echo Booh!;exit 0。

 

经初步验证,除了不能被捕捉的两个新号-9-19信号外,每当Bash收到一个预先设置等待命令完成的陷阱的信号,在所有的子进程或者子shell退出之前,trap设置的命令不会被执行到。

 

还有另外,当执行bbb.sh在终端运行时,按CTRL+Ctrap会立即触发,bbb.sh结束。

最终的原因是:CTRL+C会向当前前台进程组所有进程(子进程和父进程)都发送一个INT新号。Sleep 600在收到INT新号之后退出,这是bbb.sh捕捉到的INT信号就会触发了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值