歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux中的一個守護進程實驗

Linux中的一個守護進程實驗

日期:2017/3/2 16:33:20   编辑:Linux服務器

今天完成一個守護進程實驗。

  1 熟悉守護進程編寫和調試(系統日志)

  2 編寫多進程程序的方法

  本實驗首先創建一個守護進程,然後在其中新建一個子進程,暫停10秒,自動退出,守護進程收集子進程退出的消息。源代碼來自華清遠見

  #include<stdio.h>

  #include<stdlib.h>

  #include<unistd.h>

  #include<sys/types.h>

  #include<sys/wait.h>

  #include<syslog.h>

  int main(void)

  {

  pid_t child1, child2;

  int i;

  child1 = fork();//創建子進程1

  if(child1 == 1)

  {

  perror("child1 fork.\n");

  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);//關閉文件描述符

  }

  child2 = fork();//創建子進程2

  if(child2 == 1)

  {

  perror("child2 fork.\n");

  exit(1);

  }

  else if(child2 == 0)//子進程2中

  {

  syslog(LOG_INFO, "child2 will sleep for 10s.\n");//向日志中寫入字符串

  sleep(10);

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

  exit(0);

  }

  else//父進程(子進程1)

  {

  waitpid(child2, NULL, 0);//阻塞等待

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

  closelog();//關閉日志服務

  while(1)

  {

  sleep(10);

  }

  }

  }

  注

  1 守護進程在後台運行,所以ps -ef|grep daemon_proc查看是否運行。

  2 調試信息自動由日志系統保存到/var/log/messages文件中。

Copyright © Linux教程網 All Rights Reserved