第7章 进程关系_进程链和进程扇

Posted 浅墨浓香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7章 进程关系_进程链和进程扇相关的知识,希望对你有一定的参考价值。

2. 进程链和进程扇

(1)创建进程链

  ①进程链:就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进程,这样依次往下循环,如下图所示。

 

  ②关键实现:判断出如果是父进程则退出,保证父进程只会创建一个子进程。如果是子进程继续创建接下来的进程再退出。

【编程实验】构建进程链

//process_link.c

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

int main(int argc, char* argv[])
{
    int counter = (argc < 2 ) ? 2 : atoi(argv[1]);
    
    pid_t pid;
    int i = 0;
    //构建进程链
    for(i = 1; i<counter; i++) {
        pid = fork();
        if(pid < 0 ){
            perror("fork error");
            exit(1);
        }else if(pid == 0) { //子进程继续,以进一步创建子进程形成进程链
            continue;
        }else{ //父进程退出循环
            break;
        }
    }

    printf("pid: %d, ppid = %d\\n", getpid(), getppid());
    
    wait(0);
}

(2)创建进程扇

  ①进程扇:就是一个父进程创建出多个子进程,如下图所示。

 

  ②关键实现:判断出子进程则退出创建子进程的循环把创建进程的机会只留给父进程

【编程实验】构建进程扇

//process_swing.c

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

int main(int argc, char* argv[])
{
    int counter = (argc < 2 ) ? 2 : atoi(argv[1]);
    
    pid_t pid;
    int i = 0;
    //构建进程扇
    for(i = 1; i<counter; i++) {
        pid = fork();
        if(pid < 0 ){
            perror("fork error");
            exit(1);
        }else if(pid == 0) { //子进程则退出
            break;
        }else{ //父进程继续创建子进程
            continue;
        }
    }

    printf("pid: %d, ppid = %d\\n", getpid(), getppid());
    
    for(i=0; i<counter; i++)
        wait(0);   
}

以上是关于第7章 进程关系_进程链和进程扇的主要内容,如果未能解决你的问题,请参考以下文章

第7章 进程关系_前台进程组

第7章 进程关系_贯穿案例2:mini shell

《第7章 进程环境》

第5章 进程环境_进程的启动和终止

第3章 进程同步

第11章进程间通信_管道