Linux守护程序不工作



我已经在c++中为linux创建了一个守护进程,但是,子进程似乎什么都没做。一旦到达if(pid>0)语句,一切似乎都停止了。Daemon.Start()的代码如下:

//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);

任何帮助都会很棒!:)

我很确定您的子进程在sid < 0chdir("/") < 0if语句中死亡。在这些情况下,在退出前写入stderr以揭示问题所在:

//Create a new SID for the Child Process
sid = setsid();
if(sid < 0)
{
    fprintf(stderr,"Failed to create SID: %sn",strerror(errno));
    exit(EXIT_FAILURE);
}
//Change the current working directory
int chdir_rv = chdir("/");
if(chdir_rv < 0)
{
    fprintf(stderr,"Failed to chdir: %sn",strerror(errno));
    exit(EXIT_FAILURE);
}

您需要包括<errno.h><string.h>才能分别定义errno和strerror。

问候

相关内容

最新更新