下面是prog1程序的代码。假设程序执行成功,除非查询明确指出其他情况。 这是代码:
int main(int argc,char *argv[]){
int i;
for(i=1;i<3;i++){
if (fork()==0){
printf("A");
execvp("./prog2",&argv[1]);
printf("B");
exit(1);
}
printf("C");
}
printf("D");
return 0;
}
我们编写命令./prog1 字母 A、B、C、D 各打印多少次?
我的想法是:(初始)过程将分为父进程和子进程。父进程将打印 C,而子进程将进入 if,打印 A,然后 exec 将执行进入另一个程序,因此后面的 print B 将永远不会被打印。同样,这也会发生在第二个分叉中。 Parent 打印 C child 的操作与之前相同。最后家长打印 D. 因此 A 两次,B 零次,C 两次,D 一次。 但我运行时得到的是:A两次,B两次,C三次,D一次。 有人可以解释一下吗?
一定是你的./prog2的execvp有问题。 这可以通过将程序更改为肯定有效的众所周知的程序来证明:
int main(int argc,char *argv[]){
int i;
for(i=1;i<3;i++){
if (fork()==0){
printf("A");
execvp("/bin/true",&argv[1]);
printf("B");
exit(1);
}
printf("C");
}
printf("D");
return 0;
}