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

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

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

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

0
10.30.2014, 21:11
3 ответа

Это должно тебе помочь!

pkill -TERM -P `PID`
4
08.04.2019, 10:48
  • 1
    где `PID `— идентификатор родительского процесса? –  becko 10.30.2014, 18:27
  • 2
    @беко Да. PID — идентификатор родительского процесса. –  vembutech 10.30.2014, 18:32
  • 3
    Это должен быть правильный ответ! Что означает `ТЕРМИН `? –  GoingMyWay 08.08.2017, 06:38
  • 4
    Я думаю, что это убьет только прямых детей, а не все дерево, оставив внуков сиротами. –  Sogartar 04.16.2019, 19:23

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

sudo kill -9 -35

то есть

sudo kill -9 -<PGID>

1
08.04.2019, 10:48
  • 1
    Это убивает все поддерево? Я имею в виду, что, если 35 является родителем 65 и 78, но 78 является родителем 90? –  becko 10.30.2014, 18:26
  • 2
    Только если он в той же группе процессов. Вы можете использовать **ps -eo pid,ppid,pgid,args **, чтобы иметь лучшее представление. Дело в том, что PPID становится PGID группы процессов, запущенных после родительского процесса. –  heemayl 10.30.2014, 18:37

Используя htop, вы можете использовать F5 для отображения дерева процессов.

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

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

enter image description here

1
08.04.2019, 10:48
  • 1
    Я так делал, но иногда происходит так, что процесс-потомок становится «безродительским», т. е. его PPID присваивается 0. С вами никогда такого не случалось? –  becko 10.30.2014, 18:37
  • 2
    Утверждение «он закроет процесс и все дерево процессов за один раз» неверно. Если вы отправляете родительскому процессу сигнал TERM (, а не KILL ), он может корректно с ним справиться, завершая свои собственные дочерние процессы. Если дети получают сигнал HUP, когда их родитель завершается, они могут завершиться сами по себе. Но общее правило заключается в том, что потомки снова подключаются к процессу инициализации (PID 0 ). Никогда не думайте, что уничтожение процесса приведет к уничтожению его потомков. –  Arkanosis 08.07.2019, 09:24

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

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

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

    kill -TERM pid
    
-1
08.04.2019, 10:48

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

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

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

3
08.07.2019, 09:25

Теги

Похожие вопросы