Answers:
重点是SIGKILL不会杀死正在运行的进程。存在其他信号,使应用程序有机会做出反应。
SIGINT,SIGTERM,SIGQUIT和SIGHUP的默认行为是终止程序。但是,允许应用程序为这些信号安装处理程序。因此,应用程序在收到这些信号时的实际行为是一个约定(每个应用程序可能会也可能不会遵循),而不是系统设计。
SIGINT是其中的“最弱者”。它的常规含义是“停止当前正在做的事情,并等待进一步的用户输入”。它是终端中Ctrl+ 产生的信号C。非交互式程序通常将其视为SIGTERM。
SIGTERM是“正常”的终止信号。它告诉应用程序干净退出。该应用程序可能需要花费一些时间来保存其状态,以释放资源,例如临时文件,否则这些文件会留下来。等等。不想在关键应用程序期间被中断的应用程序可能会暂时忽略SIGTERM。
SIGHUP在苛刻性方面与SIGTERM大致相同,但是它具有特定的作用,因为当用户与该终端断开连接时,它会自动发送到在该终端中运行的应用程序(从语言上来说,这是因为用户正在通过电话线和调制解调器进行连接)挂了)。与必须显式发送的SIGTERM不同,SIGHUP通常是非自愿的,因此应用程序应尝试将其状态保存在SIGHUP上。对于非面向用户的应用程序(守护程序),SIGHUP也具有完全不同的常规含义,即重新加载其配置文件。
SIGQUIT是可燃信号中最苛刻的信号。它应在应用程序行为异常并需要立即终止时使用,并且默认情况下,传统上它会保留一个核心转储文件(现代系统中,大多数用户不知道核心文件是什么,默认情况下通常不会生成它们) 。应用程序可以设置处理程序,但应该做的很少(特别是不保存任何状态),因为在出现严重错误时将使用SIGQUIT的意图。
HUP
不一定意味着程序会退出。一些程序用于SIGHUP
重新加载配置文件。SIGKILL
当该过程处于不间断的睡眠状态时,它失败,或者被推迟了。