终止进程并等待进程退出

woo*_*ngs 21 unix linux bash process kill-process

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

我可以用类似的东西pkill <previous_pid>.如果我理解正确,这只是发送SIGTERM到目标pid.当pkill返回时,目标进程可能仍然活着.有没有办法让它pkill等到它退出?

Aar*_*lla 27

不,你能做的就是写一个循环kill -0 $PID.如果此调用失败($? -ne 0),则进程已终止:

while kill -0 $PID; do 
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

(对qbolec的代码赞不绝口)

有关:

  • 将其更改为`while $(kill -0 $ PID 2>/dev/null); 在过程被杀之后,要忽略"没有这样的过程"的消息 (2认同)

Rol*_*sen 2

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

 pkill <previous_pid>
 wait <previous_pid>
Run Code Online (Sandbox Code Playgroud)

  • 等等说“不是这个shell的pid”,我不得不`while ps -p $nPid; 睡觉1;完成;` (18认同)
  • −1:`wait`仅适用于_当前shell_的子进程,不适用于任意进程。对此没有通用的内置机制。 (15认同)