我最快什么时候可以向后台进程发送信号(陷阱)?

我最快什么时候可以向后台进程发送信号(陷阱)?

我有一个脚本,我在子 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"

相关内容