Linux分别以链式结构和扇形结构实现10个子进程的创建

本文对比了两种进程创建模式:链式结构通过循环fork创建10个子进程,而扇形结构则由一个父进程派生多级子进程。展示了vimchain.c和vimfan.c的代码实例,并介绍了它们各自的运行结果。

一、链式结构实现10个子进程的创建

进程链:父进程fork生成子进程,再由子进程fork派生出孙子进程。
vim chain.c

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(){
        int i;
        int n = 10;
        pid_t pid;  //创建一个进程,给它一个pid
        for(i = 0;i < n;i++)  //循环创建
        {
                pid = fork();  //该进程作为父进程fork出子进程
                if (pid < 0){  //出错,pid < 0
                        perror("fork error");
                        exit(1);  //退出程序
                } else if (pid > 0) {   //父进程pid > 0
                        break;  //父进程退出循环,子进程继续循环
                }
        }
                printf("pid = %d, ppid = %d\n", getpid(), getppid());
                sleep(1);  //等待,给进程创建反应时间
}

如下图,由一个进程,循环创建出10个进程
在这里插入图片描述

二、扇形结构实现10个子进程的创建

进程扇:由一个父进程派生出多个子进程
vim fan.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){
        int i;
        int n = 10;
        pid_t pid;   //创建一个进程,给它一个pid

        for (i = 0;i < n;i++){
                pid = fork();   //在循环里fork,由一个父进程fork出多个子进程

                if (pid < 0){
                        printf("fork error");
                } else if (pid == 0) {   //如果当前pid==0说明是子进程,跳出循环
,父进程继续参与创建
                        break;
                }
        }
        printf("my pid is %ld,My parent pid is %ld\n",(long)getpid(),(long)getppid());
        sleep(1);
}

运行结果如下:同一个父进程创建了10个子进程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值