即使子进程仍在运行,Bash等待子进程也可以返回

时间:2017-01-11 04:31:33

标签: linux bash shell

我有一个shell脚本,它在后台生成一个子进程并等待它(通过wait命令)。它还捕获SIGTERM并将其传递给孩子。但每当我将SIGTERM发送到父进程时,它就会出现在"等待"即使孩子还在跑步(孩子抓住了SIGTERM)。是否有可能在shell脚本内实现真正等待孩子直到孩子死亡?

1 个答案:

答案 0 :(得分:1)

这是常见习语所依赖的明确行为。请注意以下差异:

# this waits 10 seconds, and doesn't handle signal handlers until later
sleep 10

# this returns immediately when a signal is received
sleep 10 & wait $!

您完全能够检查剩余的后台任务是否存在并再次等待:

sleep 10 & pid=$!
while kill -0 "$pid"; do wait "$pid"; done

有关信号处理的完整讨论,包括此处描述的行为,请参阅SignalTrap