Мой коллега Александр Сортов поделился маленькой задачкой для C программистов:
Попробуйте без компьютера сообразить, сколько слов «before» и «after» будет напечатано после выполнения этого кода?
#include
int main() {
int pid;
printf("before");
pid = fork();
printf("\nafter");
if(pid == 0) {
_exit();
}
printf("\n");
}
На первый взгляд, печатается «before», далее из одного процесса получаются два, оба они печатают «after». Всё не так просто - «before» может остаться в буфере и напечататься в обоих процессах. И наоборот, один из «after» так и останется в буфере, когда процесс завершится вызовом _exit ().
Так что возможен и строго обратный результат - два «before» и один «after»
Я попался на первоначальную версию, ответив 1 и 4:
#include
int main() {
printf("\nbefore");
fork();
fork();
printf("\nafter");
}
Из блога
софт, хард & интERнет