Linux與命令列基礎
停止沒有回應的行程時,一般建議先用「kill 行程ID」,仍未結束時才用「kill -9 行程ID」。理由是下列何者?
- A預設的 SIGTERM(15號)可由行程接收,做完善後處理再結束;SIGKILL(9號)則無法接收,不做善後處理就強制結束
- Bkill 預設送出的 SIGTERM(15號)會連同子行程全部結束,SIGKILL(9號)只結束指定的行程,所以影響較小
- CSIGKILL(9號)可由行程接收,做完善後處理再結束;kill 預設送出的 SIGTERM(15號)則無法忽略,會立即結束
查看答案與解析
正確答案:A. 預設的 SIGTERM(15號)可由行程接收,做完善後處理再結束;SIGKILL(9號)則無法接收,不做善後處理就強制結束
訊號是作業系統通知行程發生某件事的簡短通知,各有固定的編號與名稱。kill 不加選項時送出 SIGTERM(15號),程式可以準備接收它的處理程序(handler),在結束前儲存作業中的檔案或刪除暫存檔。SIGKILL(9號)行程既無法接收也無法忽略,由核心強制結束,因此寫到一半的檔案可能以損壞的狀態留下。要停止的行程的 ID 可以用 ps 或 top 查詢。
- A. 正確。SIGTERM 有善後處理的機會,SIGKILL 則強制結束。
- B. 兩種訊號都是送給指定的行程。子行程是否也會結束,並不是由訊號的種類決定的。
- C. SIGTERM 與 SIGKILL 的性質顛倒了。可以接收並做善後處理的是 SIGTERM。