bash - bash 陷阱通过自定义信号处理程序传播到命令
问题描述
在我的脚本中,我以通常的方式捕获信号。
function on_stop {
echo 'On Stop'
sleep 10
echo 'Signalling others to exit'
trap - TERM EXIT INT
kill -s INT "$$"
}
./executable_with_custom_signal_handling &
pid=$!
trap 'on_stop' TERM EXIT INT
wait
Ifsleep
用于代替./executable_with_custom_signal_handling
一切按预期工作。否则,./executable_with_custom_signal_handling
立即与 并行接收信号on_stop
。
我想知道它与可执行文件中的自定义信号处理有关吗?
signal(SIGINT, handler)
任何已知的解决方法?
解决方案
默认情况下, shell 运行忽略SIGINT (和 SIGQUIT) 的后台命令。
然后,您的后台sleep
不会被进程组的 Ctrl-C SIGINT 中断,因为它永远不会看到信号。当您的自定义可执行文件安装新的信号操作时,替换 SIG_IGN,该可执行文件将接收 SIGINT。