当我从 bash 脚本启动 tcp 服务器时,我需要在当前实例开始侦听之前终止前一个实例(可能仍在侦听同一端口)。
我可以使用类似
pkill <previous_pid>
的东西。如果我理解正确的话,这只是将 SIGTERM
发送到目标 pid。当 pkill
返回时,目标进程可能仍然存在。有没有办法让pkill
等到它退出?
不。你能做的就是用
kill -0 $PID
编写一个循环。如果此调用失败 ($? -ne 0
),则进程已终止(在正常的 kill
之后):
while kill -0 $PID; do
sleep 1
done
(感谢 qbolec 的代码)
相关:
使用
wait
(bash 内置)等待进程完成:
pkill <previous_pid>
wait <previous_pid>
就我而言,使用进程名称更容易。它的工作原理如下:
pkill <process_name> && while pgrep -l <process_name>; do sleep 1;done;
然后,重新启动该过程。