Pull to refresh

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 в списке процессов.

Сделав ещё одно подключение - увидел увеличение количества процессов и это подключение в списке.

Возникает вопрос. А о чём речь в статье тогда если количество процессов достигло предела и как бы подключение произвести не получится?

  1. Вы можете уже иметь активное подключение. Например, у меня в течение дня активны минимум три сессии к разным серверам.

  2. Это может быть не удалённый сервер, а локальный PC. Например, у меня убунта на ноуте.

  1. Или так совпало, что вы зашли, и число процессов достигло максимума как раз :)

Как гласит админская мудрость: 7 бед - 1 резет.

После перезагрузки больше нет проблемы с занятыми pid'ами. Теперь можно нормально войти на сервер и проводить там полноценную диагностику, используя для этого стандартные инструменты.

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

аптайм полиция выписывает вам штраф

Музыкой навеяло...

Hidden text

Жонглера останавливает полиция и находит полный багажник огромных острых ножей. "Я жонглер, выступаю в цирке с этими ножами", - объясняет он. Полиция просит доказать, и жонглер показывает свое искусство на обочине. В это время мимо проезжает мужик и думает: "Хорошо, что я бросил пить! Гляди, какой тест они выдумали!"

Что, если вы подключены к машине по ssh, вы находитесь в своей верной
оболочке bash, но, к сожалению, вы не можете создавать никаких новых
процессов, потому что буквально все другие pid заняты. Что делать?

А первый вопрос: а что сделать-то надо?

Если все pid исчерпаны, то подключиться по ssh тоже не удастся, т.к. sshd делает fork на каждый конект.

А даже если удастся (допустим 1 pid доступен), то shell не запустится, т к нужен еще 1 pid, ну а если еще 1 pid доступен, то видимо не все так плохо.

У пользователя может быть активная сессия где-то в забытой вкладке терминала, ей и можно воспользоваться. Выдуманная ситуация перестаёт быть столь выдуманной, пару раз я встречался с исчерпанием PIDов, правда это было достаточно давно.

Оно же вызывает cat, sed и echo - это программы, для их запуска нужны новые процессы, так что по условию не подходит.

echo - давно встроенная, про sed/cat - да.

А я понял эта штука нужна , чтобы список запущенных процессов посмотреть и ненужные убить

список запущенных процессов посмотреть и ненужные убить

Задача со звёздочкой: как убить процесс, если нет возможности запустить kill (а задача "как посмотреть список процессов, если нет возможности запустить ps , как видим, успешно решена)

В наше время просто по имени не всегда можно угадать правильное обращение и местоимение ..

А если так? https://uk.linkedin.com/in/isabella-bosia-25ba60b4

Если все Pid кончились, то и в оболочку не попадёшь.

Sign up to leave a comment.

Other news