是否可以在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%肯定如果这是“干净”或“脏的解决方法”.