?? main.cpp
字號:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int mainCreateChildProcess();
int mainCreateOneProcess(int i_name);
int mainChildOneStakeout();
int pid[4];//進程的pid號
int main()
{
/*int pidm;
int pid1;
//int pid2;
if((pid1=fork())==0)
{
sleep(10);
if(execl("/home/slb/fork/1",(char*)0)==-1)
printf("%s\n",strerror(errno));
}
if((pid2=fork())==0)
{
sleep(10);
if(execl("/home/slb/fork/2",(char*)0)==-1)
printf("%s\n",strerror(errno));
}
pidm=getpid();
printf("m:%d\n",pidm);
printf("1 :%d\n",pid1);
printf("2 :%d\n",pid2);
printf("1 ret:%d\n",wait(&pid1));
printf("2 ret:%d\n",wait(&pid2));
sleep(2);
int pid[2];
printf("child process has create sucessfull!pid is:%d\n",pid);*/
mainCreateChildProcess();
for(int i=0;i<10;i++)
{
printf("%s\n","------------------------------");
int dead=mainChildOneStakeout();
printf("%s\n","------------------------------");
}
return 0;
}
////////////////////////////////////
int mainCreateChildProcess()
{
int i;
for(i=1;i<4;i++)
{
/*創建子進程*/
printf("%s\n","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
sleep(1);
mainCreateOneProcess(i);
sleep(1);
printf("%s\n","eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////
int mainCreateOneProcess(int i_name)//創建進程
{
if((pid[i_name] = fork())>0)
{
printf("child process:%d has create sucessfull!pid is:%d\n",i_name,pid[i_name]);
return 0;
}
else if(pid[i_name] == 0)
{
switch(i_name)
{
case 1:
execl("./1",NULL);
exit(0);
break;
case 2:
execl("./2",NULL);
exit(0);
break;
case 3:
execl("./3",NULL);
exit(0);
break;
}
}
else
{
printf("child process %d create fault!\n",i_name);
return -1;
}
}
//////////////////////////////////////////////////////////////////////////
int mainChildOneStakeout()//監視子進程,如果子進程死亡,則重新創建它
{
pid_t dead;
int status;
dead = wait(&status);
if(dead==pid[1])
{
mainCreateOneProcess(1);
sleep(1);
printf("dead child process:%d has restart!!\n",1);
return 0;
}
if(dead==pid[2])
{
mainCreateOneProcess(2);
sleep(1);
printf("dead child process:%d has restart!!\n",2);
return 0;
}
if(dead==pid[3])
{
mainCreateOneProcess(3);
sleep(1);
printf("dead child process:%d has restart!!\n",3);
return 0;
}
}
//////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -