在c中创建一个守护进程,该守护进程在后台运行但在我请求之前不执行任务

时间:2015-01-12 21:22:23

标签: c linux ipc daemon

我需要在c中创建一个守护进程,该守护进程在后台运行但在我请求之前不执行任务。

仅举例;我创建了一个守护进程,在运行时将执行

du -h --max depth=3
<{1}}上的

命令并将其输出到文件。但是我希望守护进程在后台运行,并且在我请求之前不执行此任务。

我承认这听起来毫无意义,但我有一组程序,我想要组合成一个守护进程,根据请求执行任务。

非常感谢任何有关此建议或示例。

非常感谢,

2 个答案:

答案 0 :(得分:1)

如果您使用C语言编写它并且您使用的是unix系统,请使用daemon() libc调用来分叉守护程序。它将处理所有适当的移植过程中的细节。

要等待事件,请选择所需的任何类型的进程间通信,并使用阻塞读取从该机制中读取消息。例如,您的守护程序可以等待通过named pipe收到消息。

如果您需要等待多个事件源,您可以使用select或poll或epoll进行异步编程。

如果要以某个间隔执行操作,请使用timer_fd。

答案 1 :(得分:0)

“但是我希望守护进程在后台运行,并且在我请求它之前不执行此任务。 “

一种可能的解决方案:

当您分叉进程以创建子进程时,将其PID(子进程的PID)写入文件。这将有助于为守护进程使用信令。您可以使用SIGUSR1执行任务。 在您的守护程序进程中为SIGUSR1编写一个信号处理程序来执行您正在讨论的任务。为了控制您的任务或在您请求任务时启动任务,您必须发送一个信号(在这种情况下SIGUSR1)守护进程。当守护进程收到此信号时,它将执行其信号处理程序,该处理程序将是您为执行定义的任务。在发送此信号之前,该任务将不会执行。

信号可以像这样发送:

kill(PID,SIGUSR1)//从文件中读取守护进程的PID(你之前写过的,分叉后)

因此,您的主进程可以从文件中读取PID,并将信号发送到守护进程,守护进程将开始执行指定的任务。

对于任何发现此有用的人