2013-07-27 132 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_的子節點,不是任意進程。這沒有一個通用的內置機制。 –