Я пытался понять вилки, и попытался в C:
#include<stdio.h>
#include <unistd.h>
void forker()
{
printf("%d: A\n",(int)getpid());
fork();
wait();
printf("%d: B\n",(int)getpid());
printf("%d: C\n",(int)getpid());
fork();
wait();
printf("%d: D\n",(int)getpid());
}
int main(void)
{
forker();
return 0;
}
Когда я скомпилировал и запустил результирующий a.out, вот что я заметил:
> ./a.out
3560: A
3561: B
3561: C
3562: D
3561: D
3560: B
3560: C
3563: D
3560: D
Однако, когда я делаю следующее:
> ./a.out > t.txt
происходит что-то странное:
> cat t.txt
3564: A
3565: B
3565: C
3566: D
3564: A
3565: B
3565: C
3565: D
3564: A
3564: B
3564: C
3567: D
3564: A
3564: B
3564: C
3564: D
Может кто-нибудь объяснить, пожалуйста, такое поведение?Почему выходные данные отличаются, когда они перенаправляются в файл?
Я использую Ubuntu 10.10, gcc версии 4.4.5.