c - linux中收到SIGHUP信号后如何重启C守护程序

标签 c linux daemon

任何人都可以发布一些示例代码,说明如何在守护进程收到 SIGHUP 信号后重新读取配置文件并重新启动我的守护进程。 daemon 是 Linux 上用 C 语言编写的用户空间程序,不由 inetd 启动。

最佳答案

根据您的程序编写的清晰程度,有(至少)三种方法可以做到这一点:

  1. 收到信号后,在初始化阶段之前返回到程序的开始(可能 - 但不一定 - 通过 setjmp()/longjmp() 或 sigsetjmp()/siglongjmp() 对) ,从而重置并重新读取配置文件。

  2. 收到信号后,让信号处理程序再次执行原始程序。这具有丢失所有状态并将所有全局变量和静态变量重置回其原始状态的优点。它的缺点是失去所有以前的状态。

  3. 第三种选择或许不那么残酷;它会注意到已收到信号,并在主处理循环的下一个方便点返回并重新读取配置文件。

什么工作部分取决于你的守护进程必须做什么。如果它花时间与客户交谈,您可能不想使用选项 1 或 2 中的任何一个 - 您更愿意使用选项 3。如果您正在一次性回答简单问题,残酷的方法可能是有效(并且可能更易于编程)。请注意,选项 1 需要小心处理 WIP(进行中的工作)和打开的文件之类的东西 - 如果您不小心,您将失去对资源的跟踪,守护进程将失败(内存不足,文件描述符不足 -很可能是这两者之一)。

关于c - linux中收到SIGHUP信号后如何重启C守护程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2955847/

相关文章:

linux - Gall 和 Lempitsky 如何编译 opencv 霍夫森林实现

linux - 事件按钮作为模块还是作为用户程序?

c - Net raid FS with FUSE, gcc -hello.c -o a.out, a.out 不可执行

c - 使用结构时跳过 "IF"函数

c++ - 获取计算机名和登录用户名

linux - 如何从bash中的命名管道读取 block

shell - 在 ansible 中对可执行文件进行守护进程

PHP 作为守护进程/服务

c - 如何将变量移交给* char函数?

c - 将 awk 输出通过管道传输到 C 程序中