2013-07-27 131 views
10

当我从bash脚本启动我的tcp服务器时,我需要在当前实例开始侦听之前终止先前的实例(可能仍在监听同一端口)。杀死一个进程并等待进程退出

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

+1

你能做出同样的问题,但在[unix.se]的网站? – Braiam

+0

这是我的解决方案,它也适用于服务:http://pastebin.com/VjpVNdz2。 –

+0

这是为什么“脱离主题”?这是一个与bash编程语言相关的编程问题。 – h22

回答

5

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

pkill <previous_pid> 
wait <previous_pid> 
+12

等待说“不是这个shell的pid”,我不得不''而ps -p $ nPid; do sleep 1; done;' –

+6

-1:'wait'只适用于_current shell_的子节点,不是任意进程。这没有一个通用的内置机制。 –