Bash
用於殺死程序直到死亡的 Bash 片段?
我正在嘗試編寫一個強大的 bash 腳本,並在其中創建一個後台程序。在腳本的最後,我想殺死它。我有它的PID。
我在想這樣的事情
while [[ ps ef $PID ]] ; do kill $PID sleep 0.5 done
有什麼更好的建議嗎?這種方法有什麼可能的問題嗎?
重複殺死一個程序的問題是你有一個新程序創建的競爭條件。這不是特別有可能,但有可能該程序將退出,並且在您睡覺時以相同的 PID 啟動一個新程序。
為什麼您必須反复終止該程序?如果是因為程序將退出,但收到信號後可能需要一段時間才能退出,您可以使用
wait
:kill $PID wait $PID
在理想的系統中,您永遠不必重複 a
kill
或 issuekill -9 $PID
。如果您必須這樣做,您可能需要考慮修復您正在執行的任何內容,這樣您就不必這樣做了。同時,您可能不會遇到競爭條件,您可以通過(例如)在終止程序之前檢查 /proc/$PID/ 的時間戳來防止它發生。不過,這很糟糕。