Процессный потоп на Linux


Я попробовал этот эксперимент на моем рабочем столе Linux:

int main()
{
  while(1)
    fork();
  return 0;
}

Я запустил эту программу как обычный пользователь (не root), я был удивлен, обнаружив, что она сбила мою систему, она перестала отвечать. Я надеялся,что из-за исчерпания ресурсов мой процесс был бы убит, но, очевидно, это не так. Есть идеи, почему?

Спасибо, Сид.

PS: Это был мой офис Linux box, на котором я экспериментировал из дома, я надеюсь, что все все будет в порядке, когда я его перезапущу завтра....

3 6

3 ответа:

Вы заново изобрели вилочную бомбу.

Я думаю, что большинство дистрибутивов Linux не устанавливают лимиты ресурсов для каждого пользователя по умолчанию. Вы можете настроить их, конечно, но, вероятно, нет.

Машина будет в порядке после перезагрузки-если только использование процессора не вызвало проблем с перегревом.

Чтобы обычный пользователь не создавал слишком много процессов, необходимо добавить конфигурацию в /etc/security/limits.conf

Вы можете использовать ulimit, чтобы установить ограничения, которые будет применяться к вашей текущей сессии, если вы думаете, что собираетесь запустить программу, которая может запустить слишком много процессов или использовать слишком много других ресурсов.

Вы можете найти материалы об этом вВикипедии .

Скорее всего, ваш системный администратор не устанавливал ограничений для пользователей. Если ограничения для пользователей не установлены, они не смогут никого защитить.