【发布时间】:2015-08-25 08:31:18
【问题描述】:
如果我使用组合来批量杀死一个子进程并等待它终止,我会使用
kill $PID
wait $PID
如果进程立即存在,wait 将失败,因为 pid 不再运行。
有没有办法将两个语句组合成一个语句来避免错误?
编辑:我必须杀死的进程使用临时文件;因此它必须关闭(而不仅仅是发出关闭信号)才能再次启动它。检查kill 的返回值没有帮助,因为这表明信号是否已成功传递。
【问题讨论】:
-
您的
wait的目的是什么?你真正想做什么? -
如果您想按顺序执行命令,最好查看$$ ; || etc. 否则,也许while 循环可以帮助您。
while [ $(kill ${PID}) ]; do "nothing" ;done -
@SigveKarolius 错了。
kill $PID立即返回,无论作业是否实际被杀死。只需编写一个简单的脚本来捕获和忽略SIGINT,然后看看kill是如何工作的(它会返回0,虽然工作没有被杀死)。 -
关于你想要做什么:你为什么不每次都使用一个唯一的临时文件? (查看
mktemp。) -
另外,一个不太安全的方法是简单地检查 PID 是否仍然存在。