我在C中有一个关于守护进程的普遍问题,我现在还没有看到答案。
有没有办法像一个约定或标准一样实施守护进程的控制?
– 重新进一步解释 –
我已经看到了多个文件,讲授如何在C中创build守护进程的基础知识。分叉,closures文件描述符,更改根目录等等…没有问题。 当进程进入一个无限循环时(当守护进程被创build – 可以这么说),它们全部停止。 但是这只是编码守护进程的一半; 你必须以某种方式控制它。 我可以用不同的方式工作,但我觉得还有更多的东西。
Linux系统守护进程在Qt中
一种在Linux内部进行应用程序通信的方法
守护进程不停止在Linux中
ubuntu:启动(upstart)mongodb的第二个实例
为此(检查是否有进程正在运行,或者是否停止运行的守护进程,或者…)我已经看到了不同的方法(UNIX套接字,文件锁,pid文件…)以及它们的优点和缺点。 但在我看来,似乎是意见或个人口味。 “你为什么不只是…?” 或者“我已经这样做了,它为我工作”。 而且我不确定这是不是自由的标志。
我的意思是,如果你看看sshd,httpd,syslogd等等,它们都可以通过init-scripts或服务命令(start | stop | status)来控制。 这看起来像一个标准。 但是这只是一些松散的习惯,很多人试图追随,或者在C函数的深海中有某种“框架”? 你是否必须以某种方式使它工作 – 例如让你的程序响应“停止”参数,并以某种方式结束守护进程? 还是有某种标准,惯例,UNIX方式,最佳实践…应该遵循写出“好,干净的代码”,并在大多数环境中很好地集成?
我的主要问题归结为:是否有一种方法是要完成的?
如果是这样,我可以在哪里find更多信息? 我想还有更多需要照顾的,而不仅仅是开始和停止。
将数据写入stderr会使程序在成为守护程序后退出
Linux守护进程vs前台应用程序
修改python守护进程脚本,stop不会返回OK(但会杀死进程)
父进程重启时如何让subprocess死掉
没有标准,但是有一个事实上的标准,正如你已经注意到的那样。
我建议你选择其中的一个例子,比如Apache,然后研究一下apachectl的功能。 你会发现它发送信号到守护进程,基于知道它从文件读取的PID。
在Apache的情况下,信号是有意义的,因为你不希望某种HTTP请求能够停止服务器。 在DBMS的情况下,您可能需要响应传入的命令来停止服务器,只要您先进行身份验证和授权。
您可以使用信号,或者守护进程可以创建一个unix套接字(具有适当的权限)并监听数据。这取决于您需要在程序中执行多少控制。
请记住,对于低流量的事情,可以方便地使用xinetd,让它叉和处理连接,只是响应请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。