如何将 C 程序作为守护进程运行?

如何将 C 程序作为守护进程运行?

我有一个 C 程序,我想将其作为守护进程运行。我正在 ubuntu 14.04LTS 中工作。哪种方法是正确的?有人可以帮忙吗?

答案1

现在,Ubuntu 给出了答案。

正确的方法是在 Ubuntu 14 附带的守护进程管理器下。其他人在这里所说的关于明确设计一个程序作为守护进程,并调用daemon()库函数的说法完全是错误的。讽刺的是,Ubuntu 已经推出了三个 LTS 版本事先的到版本 14 LTS——事实上是从 2006 年的 Ubuntu 6.10 开始。从那时起,它就有了这样或那样的守护进程管理器。

对于拥有适当服务管理的人来说,正确的答案是:不要打电话daemon()给你不要采取特殊步骤“成为守护进程”。对于一些人来说,自 20 世纪 90 年代初以来,这一直是正确的答案。即使是 2006 年,这个聚会也显得有些迟了。 ☺ 即便如此,对于 Ubuntu 来说,这绝对是过去十年的正确答案。

你所做的很简单。您设置了一个新贵“作业”文件,告诉新贵何时以及如何调用您的程序。新贵调用它已经被恶魔化了,没有控制终端,并且具有可预测且不变的初始过程状态。你的程序没有什么特别的并简单地运行,以正常方式将日志和错误消息写入标准错误。您可以在作业文件中安排 upstart 如何处理写入标准错误的内容。

新贵食谱详细描述了所有这些,包括控制启动事件和日志处理的各个节。这里和 AskUbuntu 上有很多关于这个主题的内容。

请做好准备,如果您稍后升级到 Ubuntu 16 LTS,世界将会发生巨大的变化。但即便如此在代码中不执行任何特殊操作,只需在守护进程管理器下运行仍将是正确答案。

进一步阅读

答案2

如果您的问题是从终端运行程序,这里有一些方法(您的程序不得要求任何用户输入):

  • 使用nohupnohup program > program.log 2>program.err &。然后您可以退出终端。

  • 使用 atd服务:echo "program > program.log 2>program.err" | at now
    echo "program > program.log 2>program.err" | batch

  • 作为启动脚本的服务。

如果您的程序要求用户输入,那么将无法在终端之外运行它,最好是使用screentux会话,然后将其与终端分离。

相关内容