2

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

我已经看到需要两个的建议forks,但调用daemon只做一个。为什么需要第二个分叉?

如果我编写 init.d 脚本来调用 bash daemon,c 代码还需要调用daemon吗?

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

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

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

4

1 回答 1

1

为什么需要第二个分叉?

在创建守护进程时执行双分叉原因是什么?

bash 守护进程 shell 命令

我的 bash 4.2 没有名为 daemon 的内置命令。你确定你的来自 bash 吗?什么版本,什么发行版?

环境变量似乎被丢弃了。

我在文档中看不到有这种效果的迹象。你确定是因为daemon?你有没有检查过他们之前是否在场,以及在那次电话之后失踪?

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

阅读有关setresuid和相关功能。

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

要看。如果你想让你的代码简单,忘记所有这些,让 init 脚本通过 eg 来完成start-stop-daemon。如果你想在你的应用程序中处理这个问题,daemon结合起来retresuid应该是一个很好的方法,尽管不是唯一的方法。

于 2013-11-13T16:38:16.067 回答