我正在尝试创建一个在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 ++守护程序的最简单方法是什么?
答案 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
应该是一个很好的方法,尽管不是唯一的方法。