创建C ++守护程序并保持环境

时间:2013-11-13 14:52:53

标签: c++ linux bash daemon

我正在尝试创建一个在Red Hat 6.3平台上运行的c ++守护程序,并且无法理解libc daemon()调用,daemon shell命令startproc之间的差异,start-stop-daemon以及谷歌建议用于创建守护进程的大约六种其他方法。

我看到过需要两个forks的建议,但是调用daemon只会做一个。为什么需要第二个叉子?

如果我编写init.d脚本来调用bash daemon,那么c代码是否仍然需要调用daemon

我实现了我的应用程序来调用c daemon()函数,因为它似乎是最简单的解决方案,但我遇到的问题是我的环境变量似乎被丢弃了。我该如何防止这种情况?

我还需要将守护程序作为特定用户运行,而不是以root身份运行。

创建保存环境变量,以特定用户身份运行并在系统启动时启动的C ++守护程序的最简单方法是什么?

1 个答案:

答案 0 :(得分:1)

  

为什么需要第二个分叉?

Answered

中的

What is the reason for performing a double fork when creating a daemon?

  

bash daemon shell命令

我的bash 4.2没有名为守护进程的内置命令。你确定你的是bash吗?什么版本,什么发行版?

  

环境变量似乎被抛弃了。

我在文档中看不到这种效果的迹象。你确定它是由daemon引起的吗?你有没有检查过它们之前是否存在,并且在那次通话后丢失了?

  

以特定用户身份运行守护程序

了解setresuid及相关功能。

  

创建保存环境变量,以特定用户身份运行并在系统启动时启动的C ++守护程序的最简单方法是什么?

取决于。如果您想保持代码简单,请忘记所有这些,并让init脚本通过以下方式执行此操作: start-stop-daemon。如果您想在自己的应用中处理此问题,daemon结合retresuid应该是一个很好的方法,尽管不是唯一的方法。