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

一、链式结构实现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个进程
Linux分别以链式结构和扇形结构实现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个子进程
Linux分别以链式结构和扇形结构实现10个子进程的创建

上一篇:从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)


下一篇:Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起