Я пытаюсь понять следующий код:UNIX поведение процесса
int main(int argc, char **argv)
{
int pid1,pid2;
if((pid1=fork())<0)
{
printf("Error bla bla");exit(1);
}
else printf("A");
if((pid2=fork())<0)
{
printf("Error bla bla");exit(2);
}
if(pid1==0)printf("B\n");
if(pid2==0)printf("C\n");
exit(0);
return 0;
}
выход я получаю выглядит так:
A
AC
AB
AB
C
Если я изменяю первый отпечаток на printf("A\n");
выход
A
C
A
B
B
C
Как ведут себя процессы в этой ситуации? Я знаю, что второй fork()
выполняется как в родительском процессе, так и в первом дочернем процессе, но почему вывод выглядит так?
Кроме того, почему он печатает последние 3 буквы в этом конкретном порядке?
Возможный дубликат [printf anomaly after "fork()"] (http://stackoverflow.com/questions/2530663/printf-anomaly-after-fork) – pilcrow
Вы могли бы сделать этот код более уродливым? –
@iharob На самом деле я мог, но это было специально написано так, чтобы смутить читателя, что в моем случае –