2013-06-21 130 views
6

SIGINT信號和SIGTERM信號有什麼區別?我知道SIGINT等同於在鍵盤上按下Ctrl + C,但是什麼是SIGTERM?如果我想優雅地停止一些後臺進程,我應該使用哪些?kill -INT vs kill -TERM

回答

10

響應的唯一區別取決於開發人員。如果開發人員希望應用程序對SIGTERM的響應與對SIGINT的響應不同,則會註冊不同的處理程序。如果您想要優雅地停止後臺進程,您通常會發送SIGTERM。如果你正在開發一個應用程序,你應該通過正常退出來響應SIGTERM。經常以相同的方式處理SIGINT,但並非總是如此。例如,通過報告狀態或部分計算來回復SIGINT通常很方便。這使得在終端上運行應用程序的用戶可以輕鬆獲得部分結果,但是終止程序比較困難,因爲它通常需要用戶打開另一個shell並通過kill發送SIGTERM。換句話說,它取決於應用程序,但約定是通過適度關閉來響應SIGTERM,兩個信號的默認操作都是終止的,大多數應用程序通過適度停止來響應SIGINT

6

如果我想優雅地停止一些後臺進程,我應該使用哪些後臺進程?

的信號UNIX的列表追溯到當電腦有串行終端和調制解調器,這是其中的概念控制終端起源的時間。當調制解調器掉落載波時,線路掛斷

SIGHUP(1)因此會指示連接丟失,迫使程序退出或重新啓動。對於守護進程syslogdsshd,進程沒有終端連接應該保持運行,SIGHUP通常是用於重新啓動或重置的信號。

SIGINT(2)和SIGQUIT(3)從字面上來說是「中斷」或「退出」,「從鍵盤」,讓用戶立即控制程序是否會失控。使用基於物理字符的終端,這將是停止程序的唯一方法!

SIGTERM(15)與任何終端處理無關,只能從另一個進程發送。這將是發送到後臺進程的傳統信號。

0

SIGINT是一個程序中斷信號, 當用戶按下Ctrl + C時將發送。 SIGTERM是一個終止信號,它會發送到一個進程來請求進程終止,但它可以被該特定進程捕獲或忽略。