我们有大约 40 台运行相同硬件和软件的计算机。他们都运行 Ubuntu 11.10。他们都只有一个用户帐户可以登录。.profile 文件设置为启动守护进程。守护进程的代码是用 C 语言编写的。
每隔几周,我们就会收到一份报告,指出守护进程不再运行。这不会发生在所有计算机上,而只会发生在一两台计算机上。我们无法始终如一地重现该问题。
查看代码,应用程序在收到 SIGHUP 或 SIGTERM 时退出。
据我了解,SIGHUP 是在用户注销时生成的。在我们的例子中,用户永远不会注销。我想知道是否有可能由于其他原因生成 SIGHUP。任何其他想法将不胜感激。
最佳答案
嗯,关于 SIGHUP 有几点需要注意。首先,它的起源是挂断的概念,即通过调制解调器之类的东西失去与控制台的连接。用现代的说法,这通常意味着它失去了控制终端。除非您小心地与您的 tty 分离,否则在给定终端中启动的任何程序都会在终端关闭时收到 SIGHUP。参见 here有关如何在您的程序中执行此操作的详细信息。其他选项包括:
- 在
screen
或tmux
中运行程序 - 使用
nohup
或其他一些守护进程框架运行您的程序
另一种可能性是故意向您的进程发送 SIGHUP,“传统”通常用于向进程发出信号,表明它应该重新读取其配置。
关于linux - 什么会导致产生SIGHUP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337701/