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

如果使用sleep而不是./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。

最新更新