kill -INT vs kill -TERM

时间:2013-06-21 16:51:20

标签: unix signals kill

SIGINT信号和SIGTERM信号之间有什么区别?我知道SIGINT等同于在键盘上按Ctrl + C,但SIGTERM是什么?如果我想优雅地停止一些后台进程,我应该使用哪些?

4 个答案:

答案 0 :(得分:11)

响应的唯一区别在于开发人员。如果开发人员希望应用程序以与SIGTERM不同的方式响应SIGINT,则会注册不同的处理程序。如果要优雅地停止后台进程,通常会发送SIGTERM。如果您正在开发应用程序,则应通过正常退出来回复SIGTERMSIGINT通常以相同的方式处理,但并非总是如此。例如,通过报告状态或部分计算来响应SIGINT通常很方便。这使得在终端上运行应用程序的用户可以轻松获得部分结果,但终止程序稍微困难一些,因为它通常要求用户打开另一个shell并通过SIGTERM发送kill 。换句话说,它取决于应用程序,但惯例是通过正常关闭来响应SIGTERM,两个信号的默认操作都是终止,大多数应用程序通过正常停止来响应SIGINT。 / p>

答案 1 :(得分:7)

  

如果我想优雅地停止一些后台处理,我应该使用哪一个?

unix信号列表可以追溯到计算机具有串行终端和调制解调器的时间,这是控制终端的概念所源自的地方。当调制解调器丢弃载波时,该行挂起

因此,

SIGHUP(1)表示连接丢失,迫使程序退出或重启。对于守护进程,如 syslogd sshd ,没有应该继续运行的终端连接的进程,SIGHUP通常是用于重启或重置的信号

SIGINT(2)和SIGQUIT(3)实际上是“中断”或“退出”,“来自键盘”,让用户立即控制程序是否会失控。使用基于物理角色的终端,这将是 唯一能阻止程序的方法!

SIGTERM(15)与任何终端处理无关,只能从其他进程发送。这将是发送到后台进程的传统信号。

答案 2 :(得分:0)

SIGINT是程序中断信号, 当用户按下Ctrl + C时将发送。 SIGTERM是一个终止信号,它将被发送到一个进程以请求进程终止,但它可以被该特定进程捕获或忽略。

答案 3 :(得分:0)

这是一个描述差异和其他重要事项的链接。 http://programmergamer.blogspot.in/2013/05/clarification-on-sigint-sigterm-sigkill.html