c++;守护进程服务器停止 我有一个C++程序编写的服务器程序,它管理用户浏览器和硬件设备之间的通信量。此服务器在我的centos计算机上运行。 当我正常运行程序时,它运行没有任何问题

c++;守护进程服务器停止 我有一个C++程序编写的服务器程序,它管理用户浏览器和硬件设备之间的通信量。此服务器在我的centos计算机上运行。 当我正常运行程序时,它运行没有任何问题,c++,linux,centos,daemon,C++,Linux,Centos,Daemon,但是尝试将程序作为守护进程运行会带来一些问题。 这是我的守护程序代码: 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){

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

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
}
pid\u t pid,sid;
pid=fork();
if(pid<0){
退出(退出失败);
}
如果(pid>0){
退出(退出成功);
}
乌马斯克(0);
sid=setsid();
如果(sid<0){
退出(退出失败);
}
如果((chdir(“/”)小于0){
退出(退出失败);
}
关闭(标准文件号);
关闭(标准文件号);
关闭(标准文件号);
而(1){
//我的程序在这里
}
程序启动正常,其父级为init。 它可以运行数小时,但当我发出大约10-15个请求时,它就停止了

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

简单地关闭
stdout
stderr
将使所有对这些文件的写入失败。我猜你的程序遇到这样的错误,检测到它并终止。标准技术是将
/dev/null
dup2(2)
打开到
STDOUT\u FILENO
STDERR\u FILENO
STDIN\u FILENO
,我认为您必须关闭或重定向STDOUT和STDERR,或者根本不向它们写入。或者使用daemonize或任何其他工具作为守护进程运行“正常”程序。删除所有输出即可。现在一切正常。