Bash等待子进程可能在子进程仍在运行时返回

3

我有一个shell脚本,它在后台生成一个子进程,并等待它(通过wait命令)。它还捕获SIGTERM并将其传递给子进程。但是每当我向父进程发送SIGTERM时,它就会从“wait”中退出,即使子进程仍在运行(子进程捕获了SIGTERM)。是否可能从shell脚本内部实现对子进程的真正等待直到子进程终止?

1个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接