当我从bash脚本启动我的tcp服务器时,我需要在当前实例开始侦听之前终止先前的实例(可能仍在监听同一端口)。杀死一个进程并等待进程退出
我可以使用类似pkill <previous_pid>
的东西。如果我理解正确,则只会将SIGTERM
发送到目标pid。当pkill
返回时,目标进程可能仍然存在。有没有办法让pkill
等到它退出?
当我从bash脚本启动我的tcp服务器时,我需要在当前实例开始侦听之前终止先前的实例(可能仍在监听同一端口)。杀死一个进程并等待进程退出
我可以使用类似pkill <previous_pid>
的东西。如果我理解正确,则只会将SIGTERM
发送到目标pid。当pkill
返回时,目标进程可能仍然存在。有没有办法让pkill
等到它退出?
使用wait
(bash的内置)等待进程完成:
pkill <previous_pid>
wait <previous_pid>
等待说“不是这个shell的pid”,我不得不''而ps -p $ nPid; do sleep 1; done;' –
-1:'wait'只适用于_current shell_的子节点,不是任意进程。这没有一个通用的内置机制。 –
号,你可以做的是写有kill -0 $PID
一个循环。如果此呼叫失败($? -ne 0
),该过程已终止。
相关:
你能做出同样的问题,但在[unix.se]的网站? – Braiam
这是我的解决方案,它也适用于服务:http://pastebin.com/VjpVNdz2。 –
这是为什么“脱离主题”?这是一个与bash编程语言相关的编程问题。 – h22