linux - 什么会导致产生SIGHUP?

标签 linux ubuntu linux-kernel

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

每隔几周,我们就会收到一份报告,指出守护进程不再运行。这不会发生在所有计算机上,而只会发生在一两台计算机上。我们无法始终如一地重现该问题。

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

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

最佳答案

嗯,关于 SIGHUP 有几点需要注意。首先,它的起源是挂断的概念,即通过调制解调器之类的东西失去与控制台的连接。用现代的说法,这通常意味着它失去了控制终端。除非您小心地与您的 tty 分离,否则在给定终端中启动的任何程序都会在终端关闭时收到 SIGHUP。参见 here有关如何在您的程序中执行此操作的详细信息。其他选项包括:

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

另一种可能性是故意向您的进程发送 SIGHUP,“传统”通常用于向进程发出信号,表明它应该重新读取其配置。

关于linux - 什么会导致产生SIGHUP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337701/

相关文章:

linux - 无法安装android studio包

python - 您如何恢复或自动排列窗口并启动虚拟环境以使用 Ubuntu 进行开发?

linux - 编写兼容的看门狗内核模块

c - 为什么同一个结构体的大小在x86和arm同版本gcc中计算出来的不一样?

linux - 使用 shell 将目录中的文件压缩为 zip 文件

linux - 在 ubuntu 上使用 linux 源代码编译模块

linux - 我可以在虚拟机上操作时破坏我的硬件吗?

c - 将用户空间代码移植到内核空间

linux - 如何通过 unix utils 或 nmon 使用 hadoop fs 获取磁盘信息?

linux - 查找固定长度的文件