理解unix fork
有人能解释为什么包含“here”的行被执行了5次,程序是如何运行的,因为我似乎不明白我是如何得到这个输出的 输出:理解unix fork,unix,process,fork,Unix,Process,Fork,有人能解释为什么包含“here”的行被执行了5次,程序是如何运行的,因为我似乎不明白我是如何得到这个输出的 输出: 12958: 0 here 12959: 0 12958: 0 here 12958: 1 here 12960: 1 12958: 0 here 12958: 1 here 代码: #包括 #包括 #包括 #包括 #包括 int main(){ int i; 对于(i=0;i它不应该得到您提到的输出 这里是11194:0 11194:1在这里 11195:0 11196:1 也
12958: 0 here
12959: 0
12958: 0 here
12958: 1 here
12960: 1
12958: 0 here
12958: 1 here
代码:
#包括
#包括
#包括
#包括
#包括
int main(){
int i;
对于(i=0;i它不应该得到您提到的输出
这里是11194:0
11194:1在这里
11195:0
11196:1
也许您应该重新编译它,然后再试一次?Fork创建了一个几乎相同的进程,包括输出缓冲区。如果在Fork
之前没有刷新这些缓冲区,两个进程都可能最终打印出内容。试着放一个fflush(stdout);
在家长的printf
之后,你在什么系统上运行这个?我明白了。不过,在不同的系统上,它是不同的,这取决于输出缓冲的工作方式。使用该网站运行它实际上是在*nix机器上运行的。是的,我知道,但我认为值得一提的是,它不像ooga说的那样是本地的这里有一个更详细的解释
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(){
int i;
for(i=0; i<2; i++){
printf("%d: %d here\n", getpid(), i);
if(fork()==0){
printf("%d: %d\n", getpid(), i);
exit(0);
}
}
for(i=0; i<2; i++){
wait(0);
}
return 0;
}