是否有可能在bash中拦截一个SIGINT,做一些事情,然后忽略它(保持bash运行).
我知道我可以忽略SIGINT
trap '' SIGINT
Run Code Online (Sandbox Code Playgroud)
我也可以用sigint做点什么
trap handler SIGINT
Run Code Online (Sandbox Code Playgroud)
但是在handler执行之后仍然会停止脚本.例如
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
Run Code Online (Sandbox Code Playgroud)
当我按下ctrl + c时,将发送SIGINT to program,但bash将跳过waitBEFORE程序正确关闭并在其信号处理程序中创建其输出.
使用@suspectus答案我可以wait $PID改为:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Run Code Online (Sandbox Code Playgroud)
这实际上对我有用我只是不是100%确定这是'干净'还是'肮脏的解决方法'.
bash ×1