Linux下创建守护进程的步骤
1.fork出子进程,然后父进程退出
2.更改会话
3.更改工作目录
4.更改umask
5.关闭文件描述符
下面我用一个简单的例子来说明。
init.c
1 #include <unistd.h> 2 #include <signal.h> 3 #include <sys/param.h> 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 7 void init_daemon(void){ 8 int pid; 9 int i; 10 if(pid = fork()){ 11 exit(0); 12 }else if(pid < 0){ 13 exit(1); 14 } 15 16 setsid(); 17 18 if(pid = fork()){ 19 exit(0); 20 }else if(pid < 0){ 21 exit(1); 22 } 23 24 for(i=0;i<NOFILE;++i){ 25 close(i); 26 } 27 28 chdir("/tmp"); 29 umask(0); 30 return 0; 31 }
testDaemon.c
1 #include <stdio.h> 2 #include <time.h> 3 4 void init_daemon(void); 5 6 void main(){ 7 FILE *fp; 8 time_t t; 9 init_daemon(); 10 11 while(1){ 12 sleep(60); 13 if((fp = fopen("test.log","a")) >= 0){ 14 t = time(0); 15 fprintf(fp,"Im here at %s\n",asctime(localtime(&t))); 16 fclose(fp); 17 } 18 } 19 }
然后用gcc编译成可执行文件就OK了。
这个Daemon会定时的向文件中写入一条log