在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时,将发送SIGINT到程序,但是bash将跳过
wait
,前提是程序已正确关闭并在其信号处理程序中创建了它的输出。使用@suspectus答案,我可以将
wait $PID
更改为:while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
这实际上对我有用,我不是100%知道这是“干净”还是“肮脏的解决方法”。
最佳答案
陷阱将从处理程序返回,但是在调用处理程序时调用命令之后。
因此,解决方案有点笨拙,但我认为它可以满足要求。 trap handler INT
也将起作用。
trap 'echo "Be patient"' INT
for ((n=20; n; n--))
do
sleep 1
done
关于bash - 在bash中捕获SIGINT,处理并忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15785522/