當我從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