題 使用“kill”來停止進程時是否可以強制執行某個退出代碼?


使用“kill”來停止進程時是否可以強制執行某個退出代碼?


5
2018-02-09 12:06


起源


你的意思是你希望程序被殺死返回某個代碼?或者你想通過使用kill發送某種類型的信號?或者在您的自定義應用程序中,當用戶發送終止信號時,您執行某些操作? - g19fanatic
我的意思是你提到的第一個選項,即強製程序被殺死返回某個代碼。抱歉不夠清楚 - ralf


答案:


如果收到任何列出的信號,這將以42退出。您可以執行其他操作,包括調用函數等。

#!/bin/bash
trap 'exit 42' SIGINT SIGQUIT SIGTERM

3
2018-02-09 15:58



這並不能解決我的問題。可能有意義的是稍微走出去解釋我想要做的事情:我有一個啟動進程的shell腳本,如果進程退出代碼0,則重新啟動它。現在在某些情況下我想手動重啟過程,在這種情況下,只需調用'kill PID'即可。但是,kill不一定會返回代碼0.強制執行此操作會很好。你能理解這個嗎? - ralf
@ralf:會的 (kill PID; exit 0) (用無條件的子shell進行kill exit 0為你工作?唯一的一次 kill 應該返回非零是否有錯誤(例如沒有這樣的過程或無效選項)。你也應該看看 流程管理。 - Dennis Williamson
會嘗試這個。也感謝所提供的鏈接 - ralf


是的,您有陷阱使用trap命令發送到腳本的kill信號,請參閱man bash並查找trap命令。

在“捕獲”發送到腳本的信號之後,您可以使用您想要的任何值退出。


2
2018-02-09 12:17