步骤1:

  同上

步骤2:建立目录

  cd workdir/linux/application/9-process

  mkdir dameon

  cd dameon

步骤:3:复制

  cp /mnt/hgfs/share/2.Linux系统部分/11.Linux系统守护进程实验/实验代码/init.c  ./  -a

  cp /mnt/hgfs/share/2.Linux系统部分/11.Linux系统守护进程实验/实验代码/test.c ./  -a

步骤4:执行

  gcc test.c init.c -o test

  ./test

  ps -ef       查看进程

  cat /tmp/test.log        查看程序输出内容

附:程序源码

  init.c

 1 #include <unistd.h> 
 2 #include <sys/types.h> 
 3 #include <sys/stat.h> 
 4 #include <stdlib.h>
 5 void init_daemon(void) 
 6 { 
 7     int pid; 
 8     int i; 
 9 
10     if (pid = fork())  
11     {
12         exit(0);
13     }  //是父进程,结束父进程   
14 
15     else if (pid < 0)
16     {
17         exit( -1 ); 
18     }   //fork失败,退出 
19 
20     setsid();  //第一子进程成为新的会话组长和进程组长 并与控制终端分离 
21 
22     if (pid = fork()) 
23     {
24         exit(0);
25     } //是第一子进程,结束第一子进程 
26     else if (pid <  0) 
27     { 
28         exit(1);
29     }   //fork失败,退出 
30 
31     //第二子进程不再是会话组长 
32     for(i=0; i< getdtablesize(); ++i)
33     //关闭打开的文件描述符 
34         close(i); 
35         chdir("/tmp");  //改变工作目录到 /tmp 
36         umask(0);  //重设文件创建掩模 
37         return; 
38 } 

   test.c

 1 #include <stdio.h> 
 2 #include <time.h> 
 3 void init_daemon(void);  //守护进程初始化函数 
 4 
 5 int main() 
 6 { 
 7     FILE *fp; 
 8     time_t  t; 
 9     init_daemon();  //初始化为Daemon 
10 
11     while(1)  //每隔2秒钟向test.log报告运行状态 
12     { 
13         sleep(2);  //睡眠2秒钟 
14         if((fp = fopen("test.log","a")) != NULL) 
15         { 
16             t=time(0); 
17             fprintf(fp,"I'm here at %sn",asctime(localtime(&t)) ); 
18             fclose(fp); 
19         } 
20     }
21     return 0;
22 }

 

posted on 2018-08-02 09:03  kingofloong  阅读(560)  评论(0)    收藏  举报