必須將 SIGKILL(和 SIGTERM)顯式發送到指定程序嗎?
閱讀吉爾斯的回答,
SIGHUP 在苛刻性方面與 SIGTERM 大致相同,但它具有特定的作用,因為當使用者與終端斷開連接時,它會自動發送到在終端中執行的應用程序(從詞源上講,因為使用者通過電話線和調製解調器連接掛了)。SIGHUP 通常是非自願的,與必須顯式發送的 SIGTERM不同,因此應用程序應嘗試將其狀態保存在 SIGHUP 上。
“必須顯式發送的 SIGTERM”中的“顯式”是否意味著 SIGTERM 必須最初由程序(而不是核心)通過程序呼叫發送
kill()
?我想知道是否必須將 SIGKILL 顯式發送到指定程序?核心可以隱式地將任何 SIGKILL 和 SIGTERM 發送到程序嗎?
當作業系統關閉時,核心是否會向正在執行的程序發送一些信號以終止它們?它是什麼信號,核心是否隱式發送它?
謝謝。
據我所知,Linux 核心不會自行發送
SIGTERM
給使用者程序。(SIGTERM
在內部與核心執行緒一起使用:這就是核心要求核心執行緒停止的方式。)在許多情況下,核心確實
SIGKILL
會自行發送給使用者程序。例如,OOM 殺手SIGKILL
用;殺死它的目標。一些核心 oops導致SIGKILL
; 各種記憶體故障都可能導致SIGKILL
s。當作業系統關閉時,使用
SIGTERM
and關閉程序SIGKILL
,但這些信號不是來自核心(或不是直接來自核心 -kill()
使用 pid 0 或負 pid 呼叫將導致核心將信號發送到一個數字程序)。它們來自終止其服務的服務管理器和作為系統管理機制一部分的各種最後一擊殺死一切的應用程序模式程序:例如killprocs
van Smoorenburgrc
腳本、killprocs
OpenRC 腳本和systemd-shutdown
程序。當核心關閉或重新啟動時,它不關心程序並且不會殺死它們(詳情請參閱
reboot()
;忽略LINUX_REBOOT_CMD_RESTART2
系統呼叫的變體,您不能使用命令參數來處理程序)。