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