Убить дерево процессов с помощью терминала?

Есть ли способ убить дерево процессов с помощью терминала?

Под уничтожением дерева процессов я имею в виду уничтожение всех потомков процесса вместе с самим процессом.

Я отметил этот вопрос htop потому что в эти дни я часто использую эту утилиту, и было бы здорово, если бы был простой способ убить дерево процессов внутри htop (что-то лучше, чем просто выбрать все процессы в поддереве).

4 ответа

В htop была функция для этого в течение длительного времени, но она отсутствовала в руководстве до 2018 года: нажмите c ключ, чтобы выбрать текущий выделенный процесс, а также все его дочерние элементы. Затем операции, которые применяются к выбранным процессам (например, k ключ) относится к процессу и его дочерям.

Это не атомно, хотя. Если новые дети появляются между моментом, когда вы нажимаете c и в тот момент, когда ядро ​​уничтожит все процессы, они не будут уничтожены и, скорее всего, будут подключены к процессу init. Это потому, что htop зацикливается на выбранных процессах и убивает их одного за другим.

Я предложил патч для добавления атомарной функции уничтожения групп в htop некоторое время назад, но реализация не была достаточно согласованной, чтобы ее можно было объединить. С его помощью можно полностью убить целую группу процессов из htop. Это не совсем то же самое, что убить целое дерево, но AFAIK, ядро ​​не предоставляет никакого способа убить произвольное дерево атомарно.

Это должно помочь вам!

pkill -TERM -P `PID`

Да, это можно сделать с помощью kill, я не уверен насчет htop. Например, если PGID процессов 65,78 и 90 равен 35, то вы можете (принудительно) убить их всех с помощью следующей команды:

sudo kill -9 -35

т.е.

sudo kill -9 -<PGID>

С помощью htop, вы можете использовать F5, чтобы показать дерево процессов.

Если вы выберете процесс в верхней части дерева, которое хотите уничтожить, нажмите F9, а затем Enter, чтобы закрыть процесс и все дерево процессов за один раз.

На снимке экрана ниже это действие приведет к закрытию Chrome и всех подпроцессов.

введите описание изображения здесь

Я попробовал это, и это сработало для меня

  1. Получить идентификатор процесса PID сверху или Htop (с помощью ленты Htop F4 напишите имя процесса, а затем F5, чтобы получить дерево)

  2. используйте эту команду, она сработала для меня

    kill -TERM pid
    
Другие вопросы по тегам