关闭

实验2

67人阅读 评论(0) 收藏 举报

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/wait.h>

#include <syslog.h>

 

int main(void)

{

  pid_t child1,child2;

  int i;

 

  child1=fork();

  if(child1==1)//pid=1的进程是init进程

   {

     perror("child1 fork");//perror是错误输出函数,若无错误就输出:child1 fork:error0

     exit(1);

   }

  else if(child1>0)

   {

     exit(0);//父进程退出

   }

 

  openlog("daemon_proc_info",LOG_PID,LOG_DAEMON);//打开系统日志服务

 

  setsid(); //设置新的会话组

  chdir("/");//更改当前目录为根目录

  umask(0);//修改文件权限掩码

  for(i=0;i<getdtablesize();i++)//它返回所在进程的文件描述附表的项数,即该进程打开的文件数目

 

   {

      close(i);

   }

//子进程1成为守护进程

  child2=fork();//子进程1的子进程2

  if(child2==1)

   {

     perror("child2 fork");

     exit(1);

   }

  else if(child2==0)

   {

     syslog(LOG_INFO,"child2 will sleep for 10s");//在日志中写入字符串

     sleep(10);

     syslog(LOG_INFO,"child2 is going to exit!");

     exit(0);

   }

  else

   {

     waitpid(child2,NULL,0);//将子进程2阻塞,子进程1收集子线程2的退出消息

     syslog(LOG_INFO,"child1 noticed that child2 has exited");

 

     closelog();//关闭日志服务

     while(1)

     {

        sleep(10);

     }

   }

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:540次
    • 积分:101
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:9篇
    • 评论:3条
    文章分类
    文章存档
    最新评论