У меня есть серверная программа, написанная на C++, которая управляет трафиком между браузером пользователя и аппаратным устройством. Этот сервер работает на моей платформе centos. Когда я запускаю программу, она работает без проблем.C++ daemon server stops
Но попытка запуска программы в качестве демона вызывает некоторые проблемы. Это мой код для демона:
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
}
Программа начинается хорошо, это родитель инициализации. Он может работать в течение нескольких часов, но когда я делаю около 10 - 15 запросов, он останавливается.
Я считаю, что код для запуска моей программы в качестве деама правилен. Меня беспокоит мой фактический код. Есть ли какие-то правила, которым я должен следовать? Любое плохое поведение, которого я должен избегать? Любые команды, которые не разрешены с помощью демона, например, вывод командной строки (что я делаю много в данный момент) и т. Д.?
http://stackoverflow.com/questions/3095566/linux-daemonize Я думаю, вам нужно закрыть или перенаправить свои stdout и stderr, или вообще не писать им. Или используйте daemonize или любой другой инструмент для запуска вашей «нормальной» программы в качестве демона. –
Снятие всех выходных данных получило трюк. Теперь все работает нормально. – megadave