利用fork創建子進程
阿新 • • 發佈:2018-06-28
ppi color bubuko id3 當前 lib -s turn 子進程
創建如圖的進程:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<wait.h>
int main()
{
int pid=fork();//創建子進程
if(pid==0)
{
printf("D:%d\t %d\n",getppid(),getpid());return 0;//子進程結束
}
int pid2=fork();//創建子進程
if(pid2==0)
{
printf( "C:%d\t %d\n",getppid(),getpid());waitpid(pid2,NULL,0);return 0;//子進程結束
}
int pid3=fork();
if(pid3==0)//創建子進程
{
printf("B:%d\t %d\n",getppid(),getpid());return 0;//子進程結束
}
printf("父進程id 當前進程id\n");
printf("A:%d\t %d\n",getppid(),getpid());
waitpid(pid,NULL, 0);waitpid(pid2,NULL,0);waitpid(pid3,NULL,0);//等待子進程結束;
return 0;
}
結果如下:
父進程id 當前進程id A:3195 6051 D:6051 6052 C:6051 6053 B:6051 6054
創建如圖的進程:
#include<stdio.h>
#include<unistd.h>
#include<wait.h>
#include<stdlib.h>
int main()
{
int pid=fork();int pid3;
if(pid==0)
{
printf("C:%d\t %d\n",getppid(),getpid());return 0;
}
int pid2=fork();
if(pid2==0)
{
pid3=fork();
if (pid3==0)
{
printf("D:%d\t %d\n",getppid(),getpid());return 0;
}
else
{
printf("B:%d\t %d\n",getppid(),getpid());return 0;
}
}
printf("父進程id 當前進程id\n");
printf("A:%d\t %d\n",getppid(),getpid());
waitpid(pid,NULL,0);waitpid(pid2,NULL,0);waitpid(pid3,NULL,0);
return 0;
}
結果如下:
父進程id 當前進程id A:3195 6071 C:6071 6072 B:6071 6073 D:6073 6074
利用fork創建子進程