Linux

必須將 SIGKILL(和 SIGTERM)顯式發送到指定程序嗎?

  • December 18, 2018

閱讀吉爾斯的回答

SIGHUP 在苛刻性方面與 SIGTERM 大致相同,但它具有特定的作用,因為當使用者與終端斷開連接時,它會自動發送到在終端中執行的應用程序(從詞源上講,因為使用者通過電話線和調製解調器連接掛了)。SIGHUP 通常是非自願的,與必須顯式發送的 SIGTERM不同,因此應用程序應嘗試將其狀態保存在 SIGHUP 上。

“必須顯式發送的 SIGTERM”中的“顯式”是否意味著 SIGTERM 必須最初由程序(而不是核心)通過程序呼叫發送kill()

我想知道是否必須將 SIGKILL 顯式發送到指定程序?核心可以隱式地將任何 SIGKILL 和 SIGTERM 發送到程序嗎?

當作業系統關閉時,核心是否會向正在執行的程序發送一些信號以終止它們?它是什麼信號,核心是否隱式發送它?

謝謝。

據我所知,Linux 核心不會自行發送SIGTERM給使用者程序。(SIGTERM在內部與核心執行緒一起使用:這就是核心要求核心執行緒停止的方式。)

在許多情況下,核心確實SIGKILL會自行發送給使用者程序。例如,OOM 殺手SIGKILL用;殺死它的目標。一些核心 oops導致SIGKILL; 各種記憶體故障都可能導致SIGKILLs。

作業系統關閉時,使用SIGTERMand關閉程序SIGKILL,但這些信號不是來自核心(或不是直接來自核心 -kill()使用 pid 0 或負 pid 呼叫將導致核心將信號發送到一個數字程序)。它們來自終止其服務的服務管理器和作為系統管理機制一部分的各種最後一擊殺死一切的應用程序模式程序:例如killprocsvan Smoorenburgrc腳本killprocsOpenRC 腳本systemd-shutdown程序

核心關閉或重新啟動時,它不關心程序並且不會殺死它們(詳情請參閱reboot();忽略LINUX_REBOOT_CMD_RESTART2系統呼叫的變體,您不能使用命令參數來處理程序)。

引用自:https://unix.stackexchange.com/questions/486359