【发布时间】:2015-03-09 23:27:47
【问题描述】:
你能帮我解决这个问题吗? execl调用的程序“exam”和“students”执行了多少次?我认为正确的答案是程序“考试”的 8 个运行时和“学生”的 0 个运行时,因为在两个第一个 fork 中将创建 3 个子进程,然后在循环中第一个 fork() 将创建更多的 4 个进程,因为已经创建的三个孩子也将运行此代码,此后我们有一个 exec 将替换创建的 7 个进程和实际程序的当前代码并运行它(程序“exam”)8 次。我的推理是否正确?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main(){
int i;
pid_t
pid=fork();
pid=fork();
for(i=0;i<5;i++){
pid=fork();
execlp("exam","exam",NULL);
if(pid==0){
break;
}
}
execlp("students", "students","sistcomp",NULL);
return 0;
}
【问题讨论】:
-
为什么不添加一些
printfs 并运行它? -
运行一下就知道了?乍看之下,至少 1 个进程将“失败”到“学生”
-
@JonathonReinhart 因为这需要工作——这是 OP 希望避免的。如果你能骗到其他傻瓜为你做,为什么还要为工作而烦恼?
-
@MartinJames 我只是想弄清楚我的推理是否正确,您不必自大,这样的cmets是不必要的
-
@SérgioGomes 你的推理在我看来是正确的。