C中的守护进程套接字服务器

时间:2013-06-13 03:55:35

标签: c linux sockets daemon

我已经成功创建了一个C程序,它运行一个无限循环,等待通过套接字连接。 我想把它作为一个守护进程,并能够启动和停止它。我该怎么做?我应该对我的代码进行哪些更改才能在后台运行?

2 个答案:

答案 0 :(得分:2)

成为守护进程所需的经典任务是:

  1. 将工作目录更改为root,以便您的守护程序不会固定另一个挂载;
  2. 致电fork()并让父退出,以便该流程不是流程组负责人;
  3. 将标准输入,标准输出和标准错误重定向到/dev/null;
  4. 调用setsid()使该进程成为没有控制终端的新会话的会话组负责人。
  5. 没有错误检查:

    chdir("/);
    
    if (fork() > 0)
        _exit();
    
    close(0);
    close(1);
    close(2);
    open("/dev/null", O_RDWR);
    dup(0);
    dup(0);
    
    setsid();
    

    在Linux上,glibc提供daemon()辅助函数来完成这些任务。

答案 1 :(得分:1)

要将c程序作为守护程序运行,您需要执行以下步骤。

// Create child process
process_id = fork();

//unmask the file mode
umask(0);

//change the directory as your home directory
strcpy(home,"HOME");                                                                                   
home=getenv(home);
chdir(home) ;


//set new session
sid = setsid();
close(STDIN_FILENO); open("/dev/null", O_RDWR);
close(STDOUT_FILENO); open("/dev/null", O_RDWR); 
close(STDERR_FILENO); open("/dev/null", O_RDWR);