抓住SIGINT在bash中,处理并忽略

是否可以在bash中拦截SIGINT,执行某些操作,然后忽略它(保持bash运行).

我知道我可以忽略SIGINT

trap '' SIGINT

我也可以在sigint上做一些事情

trap handler SIGINT

但是在处理程序执行之后仍然会停止脚本.例如.

#!/bin/bash

handler()
{
    kill -s SIGINT $PID
}

program &
PID=$!

trap handler SIGINT

wait $PID

#do some other cleanup with results from program

当我按ctrl c,SIGINT程序将被发送,但bash将跳过等待BEFORE程序正确关闭并在其信号处理程序中创建其输出.

使用@SUSPECTus答案我可以将等待$PID更改为:

while kill -0 $PID > /dev/null 2>&1
do
    wait $PID
done

这实际上适用于我,我只是不是100%肯定如果这是“干净”或“脏的解决方法”.

陷阱将从处理程序返回,但在调用处理程序后调用的命令.

所以解决方案有点笨拙,但我认为它是所需要的.陷阱处理程序INT也可以工作.

trap 'echo "Be patient"' INT

for s in 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
do
    sleep 1
done

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...