Какой лучший способ убрать после вилочной бомбы?
$ 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. Возможно, ваша система обладает такой способностью.