Implemented Application::Daemonize method

This commit is contained in:
Gunnar Beutner 2012-03-30 10:24:42 +02:00
parent 4a636d92fe
commit 238e02b56a
2 changed files with 45 additions and 0 deletions

View File

@ -108,6 +108,50 @@ void Application::RunEventLoop(void)
}
}
bool Application::Daemonize(void) {
#ifndef _WIN32
pid_t pid;
pid_t sid;
int fd;
pid = fork();
if (pid == -1) {
return false;
}
if (pid) {
fprintf(stdout, "DONE\n");
exit(0);
}
fd = open("/dev/null", O_RDWR);
if (fd) {
if (fd != 0) {
dup2(fd, 0);
}
if (fd != 1) {
dup2(fd, 1);
}
if (fd != 2) {
dup2(fd, 2);
}
if (fd > 2) {
close(fd);
}
}
sid = setsid();
if (sid == -1) {
return false;
}
#endif
return true;
}
void Application::Shutdown(void)
{
m_ShuttingDown = true;

View File

@ -22,6 +22,7 @@ public:
virtual int Main(const vector<string>& args) = 0;
void RunEventLoop(void);
bool Daemonize(void);
void Shutdown(void);
};