一步杀死并等待

urz*_*eit 5 linux bash kill waitpid

如果我使用组合来批量杀死子进程并等待它终止,我使用

kill $PID
wait $PID
Run Code Online (Sandbox Code Playgroud)

如果该进程立即存在,则该进程wait将失败,因为 pid 不再运行。

有没有办法将两个语句组合成一个语句来避免错误?

编辑:我必须杀死的进程使用临时文件;因此它必须关闭(而不仅仅是发出关闭信号)才能再次启动它。检查 的返回值kill无济于事,因为这表明信号是否已成功传递。

bto*_*bto 8

它不是单行的,但是您是否愿意考虑在短暂的睡眠后产生杀戮,然后在主线程中等待?就像是:

(sleep 1; kill $PID) &
wait $PID
Run Code Online (Sandbox Code Playgroud)

这解决了您对杀死后 PID 被重用的担忧。即使您将其减少sleep到更小,它也会引入空闲时间,但它至少应该确保您wait处于正确的过程中。