SIGINT
信号和SIGTERM
信号有什么区别?我知道 SIGINT
相当于按键盘上的 ctrl+c,但是 SIGTERM
是做什么用的呢?如果我想优雅地停止某些后台进程,我应该使用哪一个?
响应的唯一区别取决于开发人员。 如果开发人员希望应用程序对
SIGTERM
的响应与对 SIGINT
的响应不同,则将注册不同的处理程序。 如果您想正常停止后台进程,通常会发送 SIGTERM
。 如果您正在开发应用程序,您应该通过优雅退出来响应 SIGTERM
。 SIGINT
通常以相同的方式处理,但并非总是如此。 例如,通过报告状态或部分计算来响应SIGINT
通常很方便。 这使得用户在终端上运行应用程序可以轻松获得部分结果,但终止程序会稍微困难一些,因为它通常需要用户打开另一个 shell 并通过 SIGTERM
发送 kill
。 换句话说,这取决于应用程序,但惯例是通过正常关闭来响应 SIGTERM
,两个信号的默认操作都是终止,并且大多数应用程序通过正常停止来响应 SIGINT
。
如果我想优雅地停止某些后台进程,我应该使用哪一个?
unix 信号列表可以追溯到计算机拥有串行终端和调制解调器的时代,这就是“控制终端”概念的起源。 当调制解调器掉线时,线路会挂起。 因此,
SIGHUP(1) 表示连接丢失,迫使程序退出或重新启动。 对于像 syslogd 和 sshd 这样的守护进程,没有终端连接但应该保持运行的进程,SIGHUP
通常是用于重新启动或重置的信号。
SIGINT(2)和 SIGQUIT(3)
字面意思是 “中断” 或 “退出” - “从键盘” - 如果程序出现问题,用户可以立即控制。 对于基于物理字符的终端,这将是 停止程序的唯一方法! SIGTERM(15) 与任何终端处理无关,只能从另一个进程发送。 这将是发送到后台进程的传统信号。
SIGINT
信号, 当用户按下
Ctrl+C 时发送。
SIGTERM
是一个 termination信号,它被发送到进程以请求该进程终止,但它可以被该特定进程捕获或忽略。