我有一个关于 C 中守护进程的一般性问题,但到目前为止我还没有看到答案。
有没有一种方法可以实现对守护进程的控制,例如约定或标准?
--休息是进一步的解释--
我看过多个文档,教授如何在 C 中创建守护进程的基础知识。分叉、关闭文件描述符、更改根目录等……没问题。当进程进入无限循环时(当创建守护进程时 - 可以这么说),它们都会停止。但这只是编写守护进程的一半。你必须控制它somehow。我可以让它以不同的方式运作,但我感觉还有更多的事情要做。
为此(检查是否有一个进程已经在运行或停止正在运行的守护进程,或者...)我已经看到了不同的方法(UNIX 套接字、文件锁、pid 文件,...)及其优缺点。但在我看来,这似乎是意见或个人喜好; “你为什么不只是……?”或“我就是这样做的,它对我有用”。我不确定这是否是自由的标志。
我的意思是,如果你看一下 sshd、httpd、syslogd 等......它们都可以通过 init 脚本或服务命令(start|stop|status)进行控制。这看起来像是一个标准。但这只是许多人试图遵循的一些松散约定,还是在 C 函数的深海中存在某种“框架”?你必须让它发挥作用吗somehow- 例如,让您的程序响应“停止”参数并结束守护进程somehow?或者是否存在某种标准、约定、UNIX 方式、最佳实践……人们应该遵循这些标准、约定来编写“良好、干净的代码”并且在大多数环境中都能很好地集成?
我的主要问题归结为:有没有办法做到这一点?
如果是这样,我在哪里可以找到更多信息?我想除了开始和停止之外还有更多需要注意的事情。
没有标准,但有一个de facto标准,正如您已经注意到的那样。
我建议您采用其中一个示例(例如 Apache),并研究一下 apachectl 的作用。您会发现它根据从文件中读取的 PID 信息向守护进程发送信号。
对于 Apache,信号是有意义的,因为您不希望某种 HTTP 请求能够停止服务器。对于 DBMS,您可能希望响应传入命令来停止服务器,前提是您首先进行身份验证和授权。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)