LINUX.ORG.RU

fork + printf


0

1

Есть следующая программа на Си:

#include <stdio.h>

int main() {
	fork();
	fork();
	fork();
	fork();
	printf("hello world\n");
	return 0;
}

При запуске печатает случайное количество helloworld-ов, а не ровно 16. Почему такое может быть?


mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
mutex@mini:~/tmp/fork$ ./test | wc -l
16
bff7755a
()
Ответ на: комментарий от bff7755a

> cat fork.c
#include <stdio.h>

int main() {
fork();
fork();
fork();
fork();
printf(«hello world\n»);
return 0;
}

clang fork.c -o fork

fork.c:4:5: warning: implicit declaration of function 'fork' is invalid in C99
[-Wimplicit-function-declaration]
fork();
^
1 warning generated.

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

./fork|wc -l

16

anonymous
()

Предположение из разряда бредовых: после завершения процесса-родителя потомки передаются в управление к init и тот прибивает их раньше, чем они успевают отработать? Вообще, считается хорошим тоном, когда процесс-родитель ждет завершения всех своих потомков.

delete83 ★★
()
Ответ на: комментарий от delete83

> ...потомки передаются в управление к init и тот прибивает их раньше, ...

С чего бы инит будет их убивать?

anonymous
()

Перехвати SIGCHLD, посмотри --единственная причина, по которой оно может сдохнуть, реакция на SIGCHLD. Но он, вообщет-то, игнорируется...

anonymous
()
Ответ на: комментарий от anonymous

А я откуда знаю, на какой системе ТС пускает свою программу и что у него там за Init? Других идей у меня нет, в любом случае.

delete83 ★★
()

Буферизация или прочая срань на консоли?

ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.