SIGINT 和 SIGTERM 是在 Unix 及類 Unix 系統(包括 Linux)中用于進程間通信的信號,它們都可以用于請求進程終止,區別如下:
1、信號編號與定義
在信號機制里,每個信號都有對應的編號,這便于系統識別和處理。SIGINT
的編號是 2,SIGTERM
的編號是 15。
2、來源與觸發方式
SIGINT
:通常是由用戶在終端按下 Ctrl + C 組合鍵觸發的。當用戶在終端運行一個進程,并且想要終止該進程時,可以通過按下 Ctrl + C 向進程發送 SIGINT 信號。例如,你在終端運行一個 Python 腳本,按下 Ctrl + C 就會給該腳本進程發送 SIGINT 信號。
SIGTERM
:一般是由系統或其他進程發送的,用于請求目標進程正常終止。例如,使用 systemctl stop 命令停止一個服務時,systemctl 會向該服務的主進程發送 SIGTERM 信號;或者使用 kill 命令(不帶 -9 選項)時,默認發送的也是 SIGTERM 信號。
3、默認處理行為
SIGINT
:進程接收到 SIGINT 信號后,默認行為是終止進程。不過,進程可以捕獲這個信號并自定義處理邏輯。
SIGTERM
:進程接收到 SIGTERM 信號后,默認也是終止進程。但與 SIGINT 不同的是,SIGTERM 設計的初衷是讓進程有機會進行清理操作,比如保存數據、釋放資源等,然后再正常終止。
4、用途
SIGINT
:主要用于用戶在終端手動終止正在運行的進程,是一種交互式的終止方式。
SIGTERM
:常用于系統或其他進程以一種優雅的方式請求目標進程終止。比如在系統關機時,會向所有正在運行的進程發送 SIGTERM 信號,讓它們有機會進行清理工作后再終止。