杀死进程并等待进程退出

问题描述 投票:0回答:3

当我从 bash 脚本启动 tcp 服务器时,我需要在当前实例开始侦听之前终止前一个实例(可能仍在侦听同一端口)。

我可以使用类似

pkill <previous_pid>
的东西。如果我理解正确的话,这只是将
SIGTERM
发送到目标 pid。当
pkill
返回时,目标进程可能仍然存在。有没有办法让
pkill
等到它退出?

linux bash unix process kill-process
3个回答
39
投票

不。你能做的就是用

kill -0 $PID
编写一个循环。如果此调用失败 (
$? -ne 0
),则进程已终止(在正常的
kill
之后):

while kill -0 $PID; do 
    sleep 1
done

(感谢 qbolec 的代码)

相关:


2
投票

使用

wait
(bash 内置)等待进程完成:

 pkill <previous_pid>
 wait <previous_pid>

0
投票

就我而言,使用进程名称更容易。它的工作原理如下:

pkill <process_name> && while pgrep -l <process_name>; do sleep 1;done;

然后,重新启动该过程。

© www.soinside.com 2019 - 2024. All rights reserved.