首页 > 解决方案 > 在 fork 中反向调用顺序

问题描述

热烈的问候,我写了这些行,它们显示了 4 条消息,分别对应于“A”、“B”、“C”和“D”,带有 for 循环和 fork。我想通过让父进程等待子进程首先执行来反转调用(输出变为'D''C''B''A')。

初始代码(从 A 到 D 的正确顺序):

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

int main(){
int i;
for(i=0;i<4;i++){
    if (fork()){
    break;
 }
 printf("Mon nom est %c. Je viens du processus %d\n",'A'+i,getpid());
 }
 return(0);
 }

我所需输出的代码(从 D 到 A):

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

int main(){
int i;
for(i=0;i<4;i++){
    if (fork()){
    wait(NULL);
    break;
 }
printf("Mon nom est %c. Je viens du processus %d\n",'A'+i,getpid());
}
return(0);
 }

我添加了wait(NULL)但它似乎没有帮助。我先谢谢大家了!!

标签: linuxfork

解决方案


让我们在进程之间进行跟踪i

P0:i=0; fork(); wait(); exit();
        P1: i=0; printf(); i = 1; fork(); wait(); exit();
                                  P2: i=1; printf(); i=2; fork(); wait(); exit();

看图案;父母总是wait()ing 和exit()ing 没有打印。孩子在父母的地方打印,然后成为下一代的父母。

不要对样式太挑剔,但即使是这样一个小程序也可以从结构化缩进中受益:

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
    int i;
    for (i=0;i<4;i++) {
        if (fork()) {
            wait(NULL);
            break;
        }
        printf("Mon nom est %c. Je viens du processus %d\n",'A'+i,getpid());
    }
    return(0);
}

推荐阅读