【问题标题】:make bash script wait for a signal using and empty named pipe使用和清空命名管道使 bash 脚本等待信号
【发布时间】:2013-12-04 18:58:08
【问题描述】:

我正在尝试使 bash 脚本等待使用和空命名管道的信号。我最喜欢这种方法:

while : ; do sleep 1 ; done

因为这是一种忙碌的等待

我试试:

trap 'echo SIGNAL!' INT
while true;
do
  read
  echo 'AFTER READ'
done < /tmp/fifo

/tmp/fifo 是空的命名管道

我得到:

bash: /tmp/fifo: Interrupted system call
SIGNAL!

bash 脚本中止。接收信号时如何使脚本保持循环? 谢谢

【问题讨论】:

  • 如果你只是想让脚本自己暂停,让它自己发送SIGSTOP;稍后,当您准备好恢复时,发送SIGCONT。这不需要脚本本身的任何特殊处理。
  • 不,由于脚本已停止,它不会对发送给他的信号做出反应,p.e.信号情报

标签: bash signals


【解决方案1】:

扩展this answer

trap 'echo SIGNAL!; kill $(jobs -p)' INT
read < /tmp/fifo &
wait

【讨论】:

  • 好的,可以,我只是不想创建额外的过程
  • 这只是一个fork,所以开销相当小。
  • +1 表示不要忽视您的孩子,原始答案就是这样做的。不幸的是,这让我的控制台充满了丑陋的“终止信号 15”警告。也许sh -c 'trap "exit 0" TERM; read &lt; /tmp/fifo' &amp;?还是perl -e '$SIG{TERM}=\&amp;exit; sleep'
  • @pilcrow 我认为这些是由 shell 的作业控制功能产生的,该功能仅在交互式 shell 中有效。
  • 好的,.. 我现在看到了替代方案。我认为我们可以得出结论,shell 脚本有一些方法,但不像 C 语言那样简单,使用 pause()(或 sigwaitinfo())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2015-07-15
  • 2014-06-05
相关资源
最近更新 更多