Убить дерево процессов с помощью терминала?
Есть ли способ убить дерево процессов с помощью терминала?
Под уничтожением дерева процессов я имею в виду уничтожение всех потомков процесса вместе с самим процессом.
Я отметил этот вопрос htop
потому что в эти дни я часто использую эту утилиту, и было бы здорово, если бы был простой способ убить дерево процессов внутри htop
(что-то лучше, чем просто выбрать все процессы в поддереве).
4 ответа
В htop была функция для этого в течение длительного времени, но она отсутствовала в руководстве до 2018 года: нажмите c
ключ, чтобы выбрать текущий выделенный процесс, а также все его дочерние элементы. Затем операции, которые применяются к выбранным процессам (например, k
ключ) относится к процессу и его дочерям.
Это не атомно, хотя. Если новые дети появляются между моментом, когда вы нажимаете c
и в тот момент, когда ядро уничтожит все процессы, они не будут уничтожены и, скорее всего, будут подключены к процессу init. Это потому, что htop зацикливается на выбранных процессах и убивает их одного за другим.
Я предложил патч для добавления атомарной функции уничтожения групп в htop некоторое время назад, но реализация не была достаточно согласованной, чтобы ее можно было объединить. С его помощью можно полностью убить целую группу процессов из htop. Это не совсем то же самое, что убить целое дерево, но AFAIK, ядро не предоставляет никакого способа убить произвольное дерево атомарно.
Да, это можно сделать с помощью kill, я не уверен насчет htop. Например, если PGID процессов 65,78 и 90 равен 35, то вы можете (принудительно) убить их всех с помощью следующей команды:
sudo kill -9 -35
т.е.
sudo kill -9 -<PGID>
С помощью htop
, вы можете использовать F5, чтобы показать дерево процессов.
Если вы выберете процесс в верхней части дерева, которое хотите уничтожить, нажмите F9, а затем Enter, чтобы закрыть процесс и все дерево процессов за один раз.
На снимке экрана ниже это действие приведет к закрытию Chrome и всех подпроцессов.
Я попробовал это, и это сработало для меня
Получить идентификатор процесса PID сверху или Htop (с помощью ленты Htop F4 напишите имя процесса, а затем F5, чтобы получить дерево)
используйте эту команду, она сработала для меня
kill -TERM pid