【问题标题】:How to send signal to a bash script from another shell如何从另一个 shell 向 bash 脚本发送信号
【发布时间】:2014-12-12 00:37:23
【问题描述】:

我启动以下脚本,该脚本在前台的 bash shell(比如说 shell1)中运行,并从另一个 shell(shell2)发送 kill -SIGUSR1 pidof(scriptA)。什么都没发生。我究竟做错了什么 ?我尝试了其他信号(SIGQUIT 等),但结果是一样的。

test_trap.sh

function iAmDone { echo "Trapped Signal"; exit 0 } 
trap iAmDone SIGUSR1 
echo "Running... " 
tail -f /dev/null # Do nothing

在shell1中

./test_trap.sh

在shell2中

kill -SIGUSR1 ps aux | grep [t]est_trap | awk '{print $2}'

【问题讨论】:

  • 注意:@dennis-williamson

标签: linux bash shell


【解决方案1】:

直到 tail 完成后才会执行陷阱。但尾巴永远不会结束。试试:

tail -f /dev/null &
wait

trap 将在不等待 tail 完成的情况下执行,但如果您退出,则 tail 将继续运行。所以你可能想要一个kill $! 在陷阱里。

【讨论】:

  • 谢谢!这解决了问题,但我不明白“直到尾巴完成,陷阱才会执行”部分。
  • 这就是外壳的工作原理。当信号到达时,为该信号设置的任何陷阱都不会执行,直到正在运行的进程返回。如果您希望陷阱立即执行,shell 应该位于wait
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 2016-09-01
  • 2012-01-11
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多