实验2

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值