首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成SIGHUP的原因是什么?

生成SIGHUP的原因是什么?
EN

Stack Overflow用户
提问于 2012-11-12 10:39:52
回答 2查看 41.3K关注 0票数 26

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

每隔几周,我们就会收到守护进程不再运行的报告。并不是所有的计算机都会发生这种情况,只有一两台计算机会发生这种情况。我们无法始终如一地重现这个问题。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 11:09:53

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

当代码应该作为守护进程运行,但实际上不是(就像您的一样)时,有一个包装器可以将任何程序转换为守护进程。令人惊讶的是,这个包装器名为daemon!它有很多选项,可能对你来说最重要的是,如果实用程序因为任何原因而死,它可以选择自动重新启动实用程序。

如果这个命令没有安装在你的Ubuntu上,只需要sudo apt-get install daemonman daemon就可以开始了。

票数 16
EN

Stack Overflow用户

发布于 2012-11-12 20:26:47

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

  • screen中运行您的程序,或者使用nohup或其他守护框架

运行您的程序

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

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13337701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档