c++守护进程服务器停止

c++ daemon server stops

本文关键字:服务器 进程 守护 c++      更新时间:2023-10-16

我有一个用c++编写的服务器程序,用于管理用户浏览器和硬件设备之间的流量。这个服务器在我的centos机器上运行。当我正常运行程序时,它运行时没有任何问题。

但是尝试将程序作为守护进程运行会带来一些问题。这是我的守护程序代码:

pid_t pid, sid;
pid = fork();
if(pid < 0){
    exit(EXIT_FAILURE);
}
if(pid > 0) {
    exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if(sid < 0){
    exit(EXIT_FAILURE);
}
if((chdir("/")) < 0){
    exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while(1){
   //my program here
}

程序启动良好,它的父级是init。它可以运行几个小时,但当我提出大约10-15个请求时,它就会停止。

我相信作为deamon运行程序的代码是正确的。我担心的是我的实际代码。有什么规则我必须遵守吗?有什么我应该避免的不良行为吗?任何守护进程不允许的命令,比如命令行输出(我现在做了很多)等等。?

只需关闭stdoutstderr,所有对它们的写入都将失败。我猜你的程序遇到了这样一个错误,检测到它并终止。标准技术是将/dev/nulldup2(2)打开为STDOUT_FILENOSTDERR_FILENOSTDIN_FILENO