Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3304317
  • 博文数量: 266
  • 博客积分: 3081
  • 博客等级: 中校
  • 技术积分: 2640
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-04 10:35
个人简介

没什么好介绍的!穷屌丝一个~

文章分类

全部博文(266)

文章存档

2021年(3)

2020年(1)

2019年(2)

2016年(5)

2015年(1)

2014年(1)

2011年(9)

2010年(16)

2009年(31)

2008年(58)

2007年(111)

2006年(2)

2005年(26)

我的朋友

分类: C/C++

2016-01-26 18:43:20


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <signal.h>
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <sys/wait.h>
  8. using namespace std;
  9. class CChild{
  10.     private:
  11.         int value;
  12.         pid_t pid;
  13.     public:
  14.         CChild(int i){value=i;}
  15.         CChild(){value=0;}
  16.         int getValue(){
  17.             return value;
  18.         }
  19.         void setValue(int varValue){
  20.             value=varValue;
  21.         }
  22.         int getPid(){
  23.             return pid;
  24.         }
  25.         void setPid(int varPid){
  26.             pid=varPid;
  27.         }
  28.         int start(){
  29.             pid_t _pid;
  30.             _pid=fork();
  31.             printf("start child process:fork():%d\n",_pid);
  32.             if(_pid>0){
  33.                 pid=_pid;
  34.                 return 0;
  35.             }
  36.             else if(_pid <0){
  37.                 pid=_pid;
  38.                 return -1;
  39.             }else if(_pid == 0){
  40.                 pid=getpid();
  41.                 for(;;){
  42.                     sleep(20);
  43.                     printf("child process!value:%d,\tpid:%d\n",value,pid);
  44.                 }
  45.             }
  46.         }
  47. };
  48. CChild cc[10]={0,1,2,3,4,5,6,7,8,9};
  49. int log(char* str){
  50.     FILE *logfile;
  51.     logfile = fopen("/tmp/liveser.log","a+");
  52.     fputs(str,logfile);
  53.     fclose(logfile);
  54. }
  55. void child_quit(int sig){
  56.     int _pid,status;
  57.     char str[512];
  58.     _pid=wait(&status);
  59.     sprintf(str,"child exit!pid:%d",_pid);
  60.     log(str);
  61.     for(int i=0;i<9;i++)
  62.     {
  63.         if(_pid == cc[i].getPid())
  64.         {
  65.      cc[i].start();
  66.         }
  67.     }
  68. }
  69. int startMainServer(CChild *cc){
  70.     signal(SIGCHLD, child_quit);
  71.     int i,_cid;
  72.     for(i=0;i<9;i++){
  73.         printf("start child process:%d\n",i);
  74.         cc[i].start();
  75.     }
  76.     for(;;){
  77.         for(i=0;i<9;i++){
  78.             sleep(60);
  79.             printf("child %d is run!",cc[i].getPid());
  80.         }
  81.     }
  82. }
  83. int main()
  84. {
  85.     //CChild cc[10]={0,1,2,3,4,5,6,7,8,9};
  86.     cout << "Hello world!" << endl;
  87.     int i=daemon(0,0);
  88.     if(i==0){startMainServer(cc);}
  89.     if(i != 0){
  90.         exit(0);
  91.     }
  92.     return 0;
  93. }

阅读(1694) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~