当我从bash脚本启动tcp服务器时,我需要在当前实例开始侦听之前终止前一个实例(可能仍在侦听同一个端口)。
我可以使用像pkill <previous_pid>
这样的东西。如果我理解正确,这只会将SIGTERM
发送到目标pid。当pkill
返回时,目标进程可能仍然存在。有没有办法让pkill
等到它退出?
答案 0 :(得分:20)
没有。你可以做的是用kill -0 $PID
写一个循环。如果此调用失败($? -ne 0
),则该过程已终止:
while kill -0 $PID; do
sleep 1
done
(代码为qbolec的荣誉)
相关:
答案 1 :(得分:4)
使用wait
(bash builtin)等待进程完成:
pkill <previous_pid>
wait <previous_pid>