代码1

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>

int main() {
    int sv = 0;
    printf("父亲进程 %d\n", getpid());
    if(fork() == 0) {
        printf("子进程1 %d\n", getpid());
    } else if(fork() == 0) {
        printf("子进程2 %d\n", getpid());
    }
	wait(&sv);
    wait(&sv);
    return 0;
}

//执行结果
父亲进程 179
子进程1 180
子进程2 181
    
//分析
子进程执行第一个if 执行打印
父进程执行第二个if 创建子进程2
子进程2执行打印
                    |---------打印子进程1
                    |		   |-------打印子进程2
                    |		   |
--打印父亲进程-----fork--------fork------

代码2

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>

int main() {
    int sv1 = -1, sv2 = -1;

    sv1 = fork();
    sv2 = fork();

    if(sv1 == 0) {
        printf("sv1 %d\n", getpid());
    }

    if(sv2 == 0) {
        printf("sv2 %d\n", getpid());
    }

    wait(&sv1);
    wait(&sv2);
    return 0;
}

//执行结果
sv2 225
sv1 224
sv1 226
sv2 226
	   		  |----sv1----sv2
	   |----fork----sv1----( )
	   |      |----( )----sv2
----fork----fork----( )----( )

分析

画拓扑图
posted on 2022-06-01 10:37  彼岸花不开彼岸  阅读(42)  评论(0)    收藏  举报