linux - 在 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)但它似乎没有帮助。我先谢谢大家了!!
解决方案
让我们在进程之间进行跟踪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);
}