Bash

用於殺死程序直到死亡的 Bash 片段?

  • March 23, 2016

我正在嘗試編寫一個強大的 bash 腳本,並在其中創建一個後台程序。在腳本的最後,我想殺死它。我有它的PID。

我在想這樣的事情

while [[ ps ef $PID ]] ; do
 kill $PID
 sleep 0.5
done

有什麼更好的建議嗎?這種方法有什麼可能的問題嗎?

重複殺死一個程序的問題是你有一個新程序創建的競爭條件。這不是特別有可能,但有可能該程序將退出,並且在您睡覺時以相同的 PID 啟動一個新程序。

為什麼您必須反复終止該程序?如果是因為程序將退出,但收到信號後可能需要一段時間才能退出,您可以使用wait

kill $PID
wait $PID

在理想的系統中,您永遠不必重複 akill或 issue kill -9 $PID。如果您必須這樣做,您可能需要考慮修復您正在執行的任何內容,這樣您就不必這樣做了。同時,您可能不會遇到競爭條件,您可以通過(例如)在終止程序之前檢查 /proc/$PID/ 的時間戳來防止它發生。不過,這很糟糕。

引用自:https://serverfault.com/questions/44683