SIGINT
信号和SIGTERM
信号之间有什么区别?我知道SIGINT
等同于在键盘上按Ctrl + C,但SIGTERM
是什么?如果我想优雅地停止一些后台进程,我应该使用哪些?
答案 0 :(得分:11)
响应的唯一区别在于开发人员。如果开发人员希望应用程序以与SIGTERM
不同的方式响应SIGINT
,则会注册不同的处理程序。如果要优雅地停止后台进程,通常会发送SIGTERM
。如果您正在开发应用程序,则应通过正常退出来回复SIGTERM
。 SIGINT
通常以相同的方式处理,但并非总是如此。例如,通过报告状态或部分计算来响应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)