gpt4 book ai didi

c++ - 如何在 Linux 上守护一个 c/c++ 程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:20 27 4
gpt4 key购买 nike

我根据http://linux.die.net/man/1/daemonize 的指南在Linux 上编写了一个守护程序。 ,但是进程崩溃了几次,我找不到原因。困扰了我几天。

今天刚好看了《UNIX网络编程》W.Richard Stevens 的第 1 卷,第三版。在本书中,它展示了一个编写守护程序的例子。阅读示例后,我意识到我的代码中缺少“与控制终端解除关联”。

现在我的问题是守护进程,为什么我们需要与控制终端解除关联?它与进程崩溃有关吗?我的守护进程代码中是否还缺少其他地方?

感谢您的回复。

这是我的代码:

bool daemonize()
{
// http://linux.die.net/man/1/daemonize

// change working dir to root
(void) uchdir("/");

// close stdin, stderr, stdout
if (int fdnull = open("/dev/null", O_RDWR))
{
dup2 (fdnull, STDIN_FILENO);
dup2 (fdnull, STDOUT_FILENO);
dup2 (fdnull, STDERR_FILENO);
close(fdnull);
}
else
{
Log (ERR, "Failed to open /dev/null");
return false;
}

// detach from previous process group
if (setsid () == -1) /* request a new session (job control) */
{
Log (ERR, "Failed to detach from previous process group");
return false;
}

// inhibit others completely and group write
umask(027);

// it's dameonized!
return true;
}

最佳答案

这个问题中已经提到了对 C 或 C++ 程序进行 deamonize 的基本步骤:Creating a daemon in Linux

是的,问题是针对 C 而不是针对 C++,但是由于在这两种情况下您需要守护程序的系统调用都是 C 函数,所以这真的没有什么区别。

关于c++ - 如何在 Linux 上守护一个 c/c++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com