当我从我的 bash 脚本启动我的 tcp 服务器时,我需要在当前实例开始侦听之前终止前一个实例(它可能仍在侦听同一端口)。
我可以使用类似的东西pkill <previous_pid>
。如果我理解正确,这只会发送SIGTERM
到目标 pid。返回时pkill
,目标进程可能还活着。有没有办法让它pkill
等到它退出?
当我从我的 bash 脚本启动我的 tcp 服务器时,我需要在当前实例开始侦听之前终止前一个实例(它可能仍在侦听同一端口)。
我可以使用类似的东西pkill <previous_pid>
。如果我理解正确,这只会发送SIGTERM
到目标 pid。返回时pkill
,目标进程可能还活着。有没有办法让它pkill
等到它退出?
不,你可以做的是用kill -0 $PID
. 如果此调用失败 ( $? -ne 0
),则进程已终止:
while kill -0 $PID; do
sleep 1
done
(感谢 qbolec的代码)
有关的:
使用wait
(bash builtin) 等待进程完成:
pkill <previous_pid>
wait <previous_pid>