1. 程式人生 > >利用fork創建子進程

利用fork創建子進程

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創建子進程