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