在我的脚本中,我以通常的方式捕获信号。
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。