我正在運行以下代碼,這是我在Mac上用c寫的。撥打電話後打印出來的額外數據()
#include <unistd.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
int i = 0;
printf("Starting pid:%d\n", getpid());
while(i++<3){
int ret = fork();
printf("hello(%d)%d, %d ", i, getpid(), ret);
if(!ret){
printf("\n");
return 0;}
}
}
我腦子裏想的目的是爲了有6幅版畫總 - 從原來的父3(PID「啓動PID」打印),並從每個3個催生孩子的1以上。相反,我收到的是:
Starting pid:7998
hello(1)8009, 0
hello(1)7998, 8009 hello(2)8010, 0
hello(1)7998, 8009 hello(2)7998, 8010 hello(3)7998, 8011 hello(1)7998, 8009 hello(2)7998, 8010 hello(3)8011, 0
而且,原父(7998)打印6次(三次當我== 1次,用我== 2,和曾經與我== 3)。
爲什麼會發生這種情況?爲什麼我沒有收到來自父母的三張照片(一次當我== 1,我== 2,我== 3)。如果我們從父母的角度來看它 - 有一個while循環,我們應該只打印3次。
叉可能是異步或什麼的?我錯過了什麼?
優秀。重要的是緩衝區內容的複製。 –
哇..只是哇。 –
'fflush(NULL)'刷新所有打開的輸出文件。 –