我需要在c中创建一个守护进程,该守护进程在后台运行但在我请求之前不执行任务。
仅举例;我创建了一个守护进程,在运行时将执行
du -h --max depth=3
<{1}}上的命令并将其输出到文件。但是我希望守护进程在后台运行,并且在我请求之前不执行此任务。
我承认这听起来毫无意义,但我有一组程序,我想要组合成一个守护进程,根据请求执行任务。
非常感谢任何有关此建议或示例。
非常感谢,
答案 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,并将信号发送到守护进程,守护进程将开始执行指定的任务。
对于任何发现此有用的人