我在C++中爲linux創建了一個守護進程,但是,子進程似乎沒有做任何事情。一旦達到if(pid> 0)語句,一切似乎停止。 的Daemon.Start()的代碼如下:Linux守護進程無法正常工作
//Process ID and Session ID
pid_t pid,sid;
//Fork off the Parent Process
pid = fork();
if(pid < 0)
exit(EXIT_FAILURE);
//If PID is good, then exit the Parent Process
if(pid > 0)
exit(EXIT_SUCCESS);
//Change the file mode mask
umask(0);
//Create a new SID for the Child Process
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
//Change the current working directory
if((chdir("/")) < 0)
{
//Log the failure
exit(EXIT_FAILURE);
}
//Close out the standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
//The main loop.
Globals::LogError("Service started.");
while(true)
{
//The Service task
Globals::LogError("Service working.");
if(!SystemConfiguration::IsFirstRun() && !SystemConfiguration::GetMediaUpdateReady())
{
SyncServer();
}
sleep(SystemConfiguration::GetServerConnectionFrequency()); //Wait 30 seconds
}
exit(EXIT_SUCCESS);
任何幫助將是巨大的! :)
使用庫或腳本來做這種事情,不需要重新發明這個輪子。 – 2014-10-10 09:44:15
只需在stderr上放一個fprintf來發現子進程退出的位置。 – Claudio 2014-10-10 09:48:43