在创建守护进程时优先选用系统调用daemon()

在此之前,遇到需要创建守护进程的时候,我一般用如下的代码块:

  
  
  
  
  1. void init_daemon(void
  2. {  
  3.     pid_t pid; 
  4.     int i;  
  5.     pid=fork();  
  6.     if(pid>0) 
  7.     { 
  8.         exit(0);  
  9.     } 
  10.     else if(pid < 0 ) 
  11.     {  
  12.         perror("创建子进程失败\n");  
  13.         exit(1);  
  14.     } 
  15.     else if(pid == 0) 
  16.     {  
  17.         setsid(); 
  18.         //改变工作目录到tmp 
  19.         chdir("/tmp"); 
  20.         //重设文件掩码  
  21.         umask(0); 
  22.         //关闭文件描述符  
  23.         for(i=0;i<NOFILE;++i) 
  24.         { 
  25.             close(i);  
  26.         }  
  27.         return
  28.     } 
  29. }  

其实linux已经为我们准备好了系统调用:daemon()。

我们通过man命令可以得到他的头文件和函数原型:

#include <unistd.h>

int daemon(int nochdir, int noclose);

在调用时,一般只要daemon(0,0),即可。它比我们自己写代码块来的安全和稳定。

本文转载自:http://www.mysql100.com/c/c_error_list/2013/0305/336.html

你可能感兴趣的:(daemon())