较弱的杀死信号-HUP(1)-INT(2)和-TERM(15)之间的差异


32

除了最猛烈的kill -9(SIGKILL),我不太了解其他3个常见信号(之间的差别在这里-HUP(1),-INT(2)和-TERM(15)。

在哪种情况下一种可行,而另一种不可行?

通常,-9-KILL)什么时候失败?

对我来说,他们似乎要问要终止的进程正常不保存。我要对严酷程度进行评估-HUP < -TERM < -INT < -KILL


HUP不一定意味着程序会退出。一些程序用于SIGHUP重新加载配置文件。SIGKILL当该过程处于不间断的睡眠状态时,它失败,或者被推迟了。
muru 2015年

Answers:


52

重点是SIGKILL不会杀死正在运行的进程。存在其他信号,使应用程序有机会做出反应。

SIGINT,SIGTERM,SIGQUIT和SIGHUP的默认行为是终止程序。但是,允许应用程序为这些信号安装处理程序。因此,应用程序在收到这些信号时的实际行为是一个约定(每个应用程序可能会也可能不会遵循),而不是系统设计。

SIGINT是其中的“最弱者”。它的常规含义是“停止当前正在做的事情,并等待进一步的用户输入”。它是终端中Ctrl+ 产生的信号C。非交互式程序通常将其视为SIGTERM。

SIGTERM是“正常”的终止信号。它告诉应用程序干净退出。该应用程序可能需要花费一些时间来保存其状态,以释放资源,例如临时文件,否则这些文件会留下来。等等。不想在关键应用程序期间被中断的应用程序可能会暂时忽略SIGTERM。

SIGHUP在苛刻性方面与SIGTERM大致相同,但是它具有特定的作用,因为当用户与该终端断开连接时,它会自动发送到在该终端中运行的应用程序(从语言上来说,这是因为用户正在通过电话线和调制解调器进行连接)挂了)。与必须显式发送的SIGTERM不同,SIGHUP通常是非自愿的,因此应用程序应尝试将其状态保存在SIGHUP上。对于非面向用户的应用程序(守护程序),SIGHUP也具有完全不同的常规含义,即重新加载其配置文件。

SIGQUIT是可燃信号中最苛刻的信号。它应在应用程序行为异常并需要立即终止时使用,并且默认情况下,传统上它会保留一个核心转储文件(现代系统中,大多数用户不知道核心文件是什么,默认情况下通常不会生成它们) 。应用程序可以设置处理程序,但应该做的很少(特别是不保存任何状态),因为在出​​现严重错误时将使用SIGQUIT的意图。


您能否详细说明“保存他们的状态”?如果我在文本编辑器中将其杀死,则认为内容没有保存。
肯尼2015年

2
@Kenny大多数编辑器都不会保存文件,因为您可能已经进行了不希望保存的临时修改。高级编辑器(例如vi,emacs)具有自动保存的文件,该文件会不时地保存数据;在SIGHUP上,他们通常会确保自动保存文件是最新的。
吉尔斯(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.