LINUX.ORG.RU

ЛИНУКС вешается

Вот такой код вообще вешает систему намертво:

zdo@mamburu:~/Projects/os$ uname -a
Linux mamburu 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux
zdo@mamburu:~/Projects/os$ cat /etc/debian_version 
6.0
zdo@mamburu:~/Projects/os$ cat fork.c 
#include <stdio.h>
#include <unistd.h>

int main()
{
	int i;
	pid_t pid;
	FILE *f;

	f = fopen("test", "w");

	for (i = 0; i < 100; ++i) {
		pid = fork();
		if (pid == -1) {
			fprintf(stderr, "fork failed\n");
			return 1;
		}
		if (pid == 0) {
			//printf("child\n");
			fputc('1', f);
		} else {
			//printf("parent\n");
			fputc('0', f);
		}
	}

	fclose(f);
	return 0;
}
zdo@mamburu:~/Projects/os$ gcc fork.c
zdo@mamburu:~/Projects/os$ ./a.out

ПОЧЕМУ?

bk_ ★★
() автор топика
Ответ на: ЛИНУКС вешается от bk_

Вот такой код вообще вешает систему намертво

Он не вешает, просто много процессов в цикле создаёт, а вменяемые ограничения Вы или Ваш системный администратор не выставили.

      if (pid == 0) {
         //printf("child\n");
         fputc('1', f);
      } else {
         //printf("parent\n");
         fputc('0', f);
      }
У Вас сдесь нет выхода для дочернего процесса, поэтому каждый дочерний процесс продолжает цикл, со своего i, уже порождая от себя детей каждый из которых в свою очередь делает тоже самое.

Если я правильно посчитал, у Вас будет 100 факториал процессов, это приблизительно: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Если Вы подождёте пока напечатаются все сообщения об ошибке fork() или пока они все завершатся — то увидите как линукс «отвиснет».

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

Благодарю за объяснение.

Только система совершенно не реагирует после запуска этого приложения. Я имею ввиду, что ничего не печатается в gnome-terminal, caps-lock не пашет, ctrlalt+f1 тоже не работает.

Я думал, ядро справится с такой ситуацией.

bk_ ★★
() автор топика

на винде один хрен будет тормознее.

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

тьфу ты, и правда, я затупил со счётчиком цикла, думал до 100 докрутится :)

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