0
#include <stdio.h>
#include <unistd.h>
int main(void) {
int i = 0;
for (i = 0; i < 4; i++) {
fork();
printf("foo\n");
}
return 0;
}
これは「foo」を30回印刷します。どうして?このCプログラムでfork()はどのように動作しますか?
出力をパイプすると、なぜ "foo"が64回印刷されますか?
$ ./a.out | wc -l
64
試しましたか? – Scheff
'fork()'の後に変数に同じ値を持つ2つのプロセスが存在することに注意してください。したがって、ループの各反復では、プロセスの数が重複していなければなりません。これは2 + 4 + 8 + 16 = 30です。私は30 'foo'の出力を期待します。私は正しい? (もちろん、 'fork()'のどれも失敗しないと仮定します...) – Scheff
面白いです。私はターミナルに印刷するだけではファイルやlessやwc -lのようなプログラムにパイプして印刷すると、結果は変わります。私はwc -lで64を得る。 –