在bash中是否有可能拦截SIGINT,执行某些操作,然后忽略它(保持bash运行)。在bash中捕获SIGINT,处理AND ignore
我知道,我可以忽略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时,SIGINT到节目将被发送,但bash将跳过wait
BEFORE程序正常关闭,并在其信号处理程序创建它的输出。
使用@suspectus答案我可以改变wait $PID
到:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
这实际上对我的作品只是我不是100%肯定,如果这是“干净”或“肮脏的解决办法”。
为什么要多次打印? – cnicutar
@cnicutar:如果我按ctrl + c多次(我不能以当前的形式,因为它在第一个之后停止) – Zulan
我改变了我的示例以更接近实际用例。 – Zulan