在bash中,有没有可能截取一个SIGINT,做一些事情,然后忽略它(保持bash运行)。
我知道我可以忽略SIGINT
trap '' SIGINT
我还可以在sigint上做一些事情
trap handler SIGINT
但这仍然会在handler
执行后停止脚本。例如。
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
当我按ctrl+c时,程序将被发送信号,但在程序被正确关闭并在其信号处理程序中创建其输出之前,bash将跳过wait
。
使用@suspectus answer,我可以将wait $PID
更改为:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
这实际上对我来说是有效的,我只是不能100%确定这是“干净的”还是“肮脏的变通办法”。
发布于 2013-04-03 19:51:59
陷阱将从处理程序返回,但在调用处理程序时调用的命令之后返回。
所以这个解决方案有点笨拙,但我认为它做到了所需的。trap handler INT
也可以工作。
trap 'echo "Be patient"' INT
for ((n=20; n; n--))
do
sleep 1
done
https://stackoverflow.com/questions/15785522
复制相似问题