我有一个脚本,我在子 shell 中运行第二个脚本。最快什么时候可以向第二个脚本发送信号?
脚本1:
./script2 &
kill -SIGCONT $!
脚本2:
echo "~~ ENTRY"
trap 'SUSPEND=false' SIGCONT
SUSPEND=true
while $SUSPEND; do; sleep 1; done
echo "~~ EXIT"
这不会起作用,终端只会挂在“暂停”模式下。我猜是因为我kill
在运行 script2 后立即调用,script2 中的陷阱没有时间进行解析,因此什么也没发生 - 竞争条件。
那么我最快什么时候可以向子进程发送信号——确保它被捕获?
答案1
您可以将消息发送到命名管道作为script2
已准备好处理信号的信号。
脚本1:
mkfifo /tmp/pipe
./script2 &
read nothing < /tmp/pipe
kill -CONT $!
脚本2:
echo "~~ ENTRY"
trap 'SUSPEND=false' SIGCONT
echo ready > /tmp/pipe
SUSPEND=true
while $SUSPEND; do; sleep 1; done
echo "~~ EXIT"