什么可以导致生成SIGHUP?

Pet*_*ter 18 linux ubuntu linux-kernel

我们有大约40台运行相同硬件和软件的计算机.他们都运行Ubuntu 11.10.它们都只有一个用户帐户才能登录..profile文件设置为启动守护程序进程.守护程序的代码用C编写.

几周后,我们会收到一份报告,告知该守护程序不再运行.这不会发生在所有计算机上,只会发生一两个.我们不能始终如一地重现这个问题.

查看代码,应用程序在收到SIGHUP或SIGTERM时退出.

据我了解,当用户注销时会生成SIGHUP.在我们的例子中,用户从不注销.我想知道是否有可能因为其他原因而生成SIGHUP.任何其他想法将不胜感激.

sts*_*uad 20

好吧,有关SIGHUP的一些注意事项.首先,它的起源是挂机的概念,即通过调制解调器之类的东西失去与控制台的连接.用现代的说法,这通常意味着它失去了控制权.除非您已经注意从您的tty分离,否则在终端关闭时,在给定终端中启动的任何程序都将收到SIGHUP.有关如何在程序中执行此操作的详细信息,请参见此处.其他选择包括:

  • 在里面运行您的程序screentmux
  • 使用nohup或其他一些守护程序框架运行您的程序

另一种可能性是故意向您的进程发送一个SIGHUP,其中"传统"通常用于表示应该重新读取其配置的进程.


mvp*_*mvp 12

可以使用kill实用程序或kill系统调用发送信号.当然,您可以尝试找出谁发送该信号或断开您的终端或网络连接,但有更简单实用的方法来解决您的问题.

当代码应该作为守护进程运行时,但实际上不是(就像你的那样),有一个包装器可以将任何程序变成守护进程.惊喜 - 这封包被称为daemon!它有很多选项,可能是最重要的选择,如果因任何原因死亡,它会自动重启你的实用程序.

如果你的Ubuntu未安装该命令,只是sudo apt-get install daemonman daemon上手.