0
我有一個用C++編寫的服務器程序,用於管理用戶瀏覽器和硬件設備之間的流量。這臺服務器運行在我的centos機器上。 當我正常運行程序時,它運行沒有任何問題。C++守護進程服務器停止
但試圖將該程序作爲守護程序運行會引發一些問題。 這是我的守護代碼:
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運行我的程序是正確的。 我擔心的是我的實際代碼。 我有什麼規定要遵循? 我應該避免的任何不良行爲? 守護進程不允許的任何命令,如命令行輸出(目前我做了很多)等等?
http://stackoverflow.com/questions/3095566/linux-daemonize我認爲你必須關閉或重定向你的stdout和stderr,或者根本不寫信給他們。或者使用守護進程或任何其他工具來將「正常」程序作爲守護進程運行。 –
刪除所有的輸出做了訣竅。現在一切正常。 – megadave