Какой лучший способ убрать после вилочной бомбы?

$ ls
bash: no more processes

Ооо Похоже, кто-то сделал вилочную бомбу. Там, где я раньше работал, это в значительной степени означало, что общий сервер должен был выключаться и выключаться, поскольку даже системные администраторы с root-правами часто не могли решить проблему. Часто они даже не могли получить подсказку.

Я слышал несколько трюков (в частности, для отправки сигналов STOP, а не KILL, поскольку последние позволили бы оставшимся потокам немедленно заменить убитые), но я никогда не видел подробного руководства под названием " Итак, вы сами" вилочная бомба?

Давайте сделаем один.

4 ответа

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

Таким образом, один пользователь исчерпает свою квоту процесса задолго до того, как будет достигнут системный лимит.

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

Если это не сработает, вы можете попробовать запустить kill -STOP -2 как root, чтобы заморозить все процессы, запущенные от имени любого пользователя, кроме root. Если это работает, вы можете использовать kill -CONT <pid> разморозить некоторые известные процессы, которые не связаны с вилочной бомбой, и убить их, чтобы устранить проблему с таблицей процессов в полном объеме и дать вам некоторое пространство для поиска и устранения первоначального источника проблемы. Sendmail был бы хорошим примером системного процесса для уничтожения, поскольку его было бы легко идентифицировать, используя файл.pid для идентификации pid. Например, kill -CONT $(< /var/run/sendmail.pid); kill $(< /var/run/sendmail.pid),

Не уверен, как вы могли бы даже отправить сигнал STOP, так как нерест kill потребуется доступный дескриптор процесса. Кроме того, по моему опыту, системы перегружаются и становятся непригодными для использования задолго до завершения процессов.

Рассматривали ли вы просто принудительное ограничение лимитов для каждого пользователя с помощью ulimit? Это помешает вашим пользователям запускать вилочные бомбы (случайно или нет).

Некоторые системы BSD имеют возможность зарезервировать последние 5 или около того процессов для root. Возможно, ваша система обладает такой способностью.

Другие вопросы по тегам