Comments 28
No forking в данном контексте означает, что не выполняется системный вызов fork() для запуска других процессов. То есть, фактически, используются только built-in команды bash.
Что, если вы подключены к машине по ssh, вы находитесь в своей верной оболочке bash, но, к сожалению, вы не можете создавать никаких новых процессов, потому что буквально все другие pid заняты. Что делать?
Поубиваю процессы "лишние". Зачем они висят в системе? Да и зачем мне подключаться к системе в которой нельзя создать/запустит процесс?
Странный вопрос в целом.
А кстати, как вы будете убивать процессы? kill тоже не запустится же.
В целом, мне кажется, всем очевидно, что задачка из топика представляет собой просто разминку для ума, и реальной пользы от неё нет.
Если я вижу что в системе запущено 32k процесов - ну здесь точно уже всё плохо и первое что нужно сделать - отключить это от общей сети, чтобы вся эта малварь не перебралась дальше. Теоретически может частично помочь ребут, но данные на сервере можно начинать оплакивать и начинать менять все пароли, к которым этот сервер мог иметь доступ...
Если в системе кончились pid - то и запустить этот bash_ps_aux я тоже не смогу. А если и смогу - то простыня с выводом на 32к строк мне не сильно поможет.
Почему малварь? Малвари как раз совсем не нужно, чтобы вы её заметили. А вот ошибка в какой‐нибудь реализации пула процессов, не выявленная при тестировании — мне кажется, не менее вероятно, чем малварь. (Конечно, это может быть и малварь с ошибкой в реализации пула процессов.) bash_ps_aux
в этом случае теоретически поможет — и, если вы как‐то всё‐таки смогли подключиться, то bash_ps_aux
можно запустить, скопировав его код непосредственно в оболочку (с небольшими изменениями из‐за смены способа запуска).
А простыня на 32к строк не поможет, только если это 32к каких‐то случайных имён. Скорее всего, там будет много повторов, если не вообще 31к копий одного процесса — так что вы сможете понять, куда копать при расследовании.
Это, правда, не значит, что я считаю, что задача не разминка для ума — скорее всего, у вас или уже есть данные из других средств мониторинга, или вы уже знаете, кто виноват, т.к. как сами и запустили этот пул процессов в ходе его тестирования, или сервер был быстро и автоматически убит, или вы просто не можете подключиться, т.к. не подумали о необходимости постоянно держать сессию на случай исчерпания PID.
Ну не знаю. Если мне скажут что на сервере 32к процессов - я не буду искать в интернете этот скрипт, чтобы не спеша вставить его, выполнить и листать 32к строк в консоли. Я предположу самое плохое и грохну сервер.
Раньше, когда сервера были железными и подороже, вполне существовал способ - дефейснуть сайт, забить всё место на диске (чтобы логи не писались), занять все pid (чтобы админ не смог подключиться и прогнать). При ребуте - повторить.
Почему малварь? Малвари как раз совсем не нужно, чтобы вы её заметили.
(Глядя поверх очков): Эх, челодой моловек, поживёте с моё — осознаете Дао и поймёте, что и в малвари тоже бывают ошибки...
А кстати, как вы будете убивать процессы? kill тоже не запустится же.
манипуляции с /proc/$pid/oom_score_adj (слать значения до 1000) или oom_adj (до 15), и ядро само убьет процесс
Не силен в линуксе, но предполагал что всё что не делается(понятно что не "всё") в нём - пораждает процесс. Решил проверить.
Не знаю считается ли астра - каноничным линуксом или в ней всё не так, но... Подключившись по ssh увидел своё подключение + bash в списке процессов.
Сделав ещё одно подключение - увидел увеличение количества процессов и это подключение в списке.
Возникает вопрос. А о чём речь в статье тогда если количество процессов достигло предела и как бы подключение произвести не получится?
Как гласит админская мудрость: 7 бед - 1 резет.
После перезагрузки больше нет проблемы с занятыми pid'ами. Теперь можно нормально войти на сервер и проводить там полноценную диагностику, используя для этого стандартные инструменты.
Боюсь, при отсутствии свободных процессов, логирование может отвалиться и полноценную диагностику провести не будет возможности. А причиной может быть, как упомянуто выше, малварь или иная зараза из вне. Значит надо обращаться к безопасникам и уже с ними решать проблему.
аптайм полиция выписывает вам штраф
Музыкой навеяло...
Hidden text
Жонглера останавливает полиция и находит полный багажник огромных острых ножей. "Я жонглер, выступаю в цирке с этими ножами", - объясняет он. Полиция просит доказать, и жонглер показывает свое искусство на обочине. В это время мимо проезжает мужик и думает: "Хорошо, что я бросил пить! Гляди, какой тест они выдумали!"
Что, если вы подключены к машине по ssh, вы находитесь в своей верной
оболочке bash, но, к сожалению, вы не можете создавать никаких новых
процессов, потому что буквально все другие pid заняты. Что делать?
А первый вопрос: а что сделать-то надо?
Если все pid исчерпаны, то подключиться по ssh тоже не удастся, т.к. sshd делает fork на каждый конект.
А даже если удастся (допустим 1 pid доступен), то shell не запустится, т к нужен еще 1 pid, ну а если еще 1 pid доступен, то видимо не все так плохо.
А я понял эта штука нужна , чтобы список запущенных процессов посмотреть и ненужные убить
представила
Если все Pid кончились, то и в оболочку не попадёшь.
Представлена версия ps aux, полностью написанная на bash