抓住SIGINT在bash中,处理并忽略
发布时间:2020-12-15 18:48:31 所属栏目:安全 来源:网络整理
导读:是否可以在bash中拦截SIGINT,执行某些操作,然后忽略它(保持bash运行). 我知道我可以忽略SIGINT trap '' SIGINT 我也可以在sigint上做一些事情 trap handler SIGINT 但是在处理程序执行之后仍然会停止脚本.例如. #!/bin/bashhandler(){ kill -s SIGINT $PID}p
是否可以在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |