Я только что узнал о fork, и, насколько я понимаю, дочерний процесс запускает выполнение из вызова в fork (иначе fork будет рекурсивным?).Почему главный вызов дважды?
Однако в этом коде (ideone link):
int main() {
printf("%d: Common code1\n", getpid());
if (fork() != 0) {
printf("%d: Parent code\n", getpid());
} else {
printf("%d: Child code\n", getpid());
}
printf("%d: Common code\n", getpid());
}
Выход есть:
27380: Common code1
27380: Parent code
27380: Common code
27380: Common code1
27383: Child code
27383: Common code
Я не понимаю, почему четвёртая строка печатается? Я мог понять, был ли он напечатан из дочернего процесса и вилка main, но она напечатана от родителя, а fork не вызывает main.
Возможный дубликат [Почему выход печатает дважды?] (Http://stackoverflow.com/questions/3822755/why-the-output-is-printing-twice) – leppie
Вы действительно * имеете *, чтобы выбрать два чрезвычайно длинные строки, которые * отличаются только одним крошечным символом *? Вы ненавидите нас так много? –
Чрезвычайно длинный? Я только что скопировал и вложил его, и добавив, что 1 была самой быстрой войной с дифференциацией –