除了最猛烈的kill -9
(SIGKILL),我不太了解其他3个常见信号(之间的差别在这里)-HUP
(1),-INT
(2)和-TERM
(15)。
在哪种情况下一种可行,而另一种不可行?
通常,-9
(-KILL
)什么时候失败?
对我来说,他们似乎要问要终止的进程正常,不保存。我要对严酷程度进行评估-HUP < -TERM < -INT < -KILL
。
重点是SIGKILL不会杀死正在运行的进程。存在其他信号,使应用程序有机会做出反应。
SIGINT,SIGTERM,SIGQUIT和SIGHUP的默认行为是终止程序。但是,允许应用程序为这些信号安装处理程序。因此,应用程序在收到这些信号时的实际行为是一个约定(每个应用程序可能会也可能不会遵循),而不是系统设计。
SIGINT是其中的“最弱者”。它的常规含义是“停止您现在正在做的事情,并等待进一步的用户输入”。它是终端中Ctrl+产生的信号C。非交互式程序通常将其像SIGTERM一样对待。
SIGTERM是“正常”的终止信号。它告诉应用程序干净退出。该应用程序可能需要花费一些时间来保存其状态,以释放资源,例如本来可以保留的临时文件等。在关键应用程序中不希望被中断的应用程序可能会暂时忽略SIGTERM。
SIGHUP在苛刻性方面与SIGTERM大致相同,但是它具有特定的作用,因为当用户与该终端断开连接时,它会自动发送给在该终端上运行的应用程序(从语言上来说,这是因为用户正在通过电话线和调制解调器进行连接)挂了)。与必须显式发送的SIGTERM不同,SIGHUP通常是非自愿的,因此应用程序应尝试将其状态保存在SIGHUP上。对于非面向用户的应用程序(守护程序),SIGHUP也具有完全不同的常规含义,即重新加载其配置文件。
SIGQUIT是可燃信号中最苛刻的信号。它应在应用程序行为异常并需要立即终止时使用,并且默认情况下,它传统上会保留一个核心转储文件(现代系统中,大多数用户不知道核心文件倾向于默认情况下不生成它们) 。应用程序可以设置一个处理程序,但应该做的很少(特别是不保存任何状态),因为在出现严重错误时将使用SIGQUIT的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句