首页 > 解决方案 > 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)

任何已知的解决方法?

标签: bashsignalsbash-trap

解决方案


默认情况下, shell 运行忽略SIGINT (和 SIGQUIT) 的后台命令

然后,您的后台sleep不会被进程组的 Ctrl-C SIGINT 中断,因为它永远不会看到信号。当您的自定义可执行文件安装新的信号操作时,替换 SIG_IGN,该可执行文件接收 SIGINT。


推荐阅读