C语言中的守护进程有没有一种方式可以实现?

时间:2013-02-22 13:09:49

标签: c linux unix daemon

我有一个关于C中守护进程的一般性问题,我现在还没有看到答案。

有没有办法实现守护进程的控制,如约定或标准?

- 休息是进一步的解释 -

我已经看过多个文档,教授基础知识如何在C语言中创建守护进程,分离文件描述符,更改root等等......没问题。当进程进入无限循环时(当创建守护进程时 - 也就是说),它们都会停止。但这只是编写守护进程的一半;你必须以某种方式控制它 。我可以让它以不同的方式工作,但我觉得还有更多的东西。

为此(检查是否有进程已在运行或停止正在运行的守护程序进程,或......)我已经看到了与其专业人员不同的方法(UNIX套接字,文件锁,pid文件......)和利弊。但在我看来,它似乎是意见或个人口味; “你为什么不......”或者“我这样做了,它对我有用”。而且我不确定这是否是自由的标志。

我的意思是,如果你看看sshd,httpd,syslogd等......它们都可以通过init-scripts或service命令(start | stop | status)来控制。这看起来像一个标准。但是,这只是很多人试图遵循的松散惯例,还是在C函数的深海中存在某种“框架”?你是否必须让它以某种方式工作 - 例如让你的程序响应一个“停止”参数并以某种方式结束守护进程 ?或者是否存在某种标准,约定,UNIX方式,最佳实践......应该遵循编写“良好,干净的代码”并在大多数环境中集成良好的方法?

我的主要问题归结为:有没有办法实现它?

如果是这样,我在哪里可以找到更多信息?我想还有更多需要注意的事情,而不仅仅是开始和停止。

2 个答案:

答案 0 :(得分:3)

没有标准,但有一个事实上的标准,正如您已经注意到的那样。

我建议您选择其中一个示例,例如Apache,并查看apachectl的功能。你会发现它根据知道从文件中读取的PID向守护进程发送信号。

在Apache的情况下,信号是有意义的,因为您不希望某种HTTP请求能够停止服务器。对于DBMS,您可能希望响应传入的命令以停止服务器,前提是您首先进行身份验证和授权。

答案 1 :(得分:2)

您可以使用信号,或者守护程序可以创建一个unix套接字(具有适当的权限)并监听数据。这取决于您需要对程序实施多少控制。

请记住,对于低流量的东西,使用xinetd并让它分叉并处理连接是很方便的,只需响应请求。