Уничтожение дерева процессов в top/htop

System V Unix AT&T не является открытым исходным кодом, таким образом, Вы не можете получить его.

12
05.02.2013, 21:44
4 ответа

От man htop:

ИНТЕРАКТИВНЫЕ КОМАНДЫ

Тег пространства или снимает метку с процесса. Команды, которые могут воздействовать на несколько процессов, как "уничтожение", будут затем применяться по списку теговых процессов вместо в настоящее время выделяемого.

U Снимают метку со всех процессов (удалите все теги, добавленные с клавишей "Пробел").

F9, k "Уничтожают" процесс: отправляет сигнал, который выбран в меню одному или группе процессов. Если процессы были отмечены, отправляет сигнал во все теговые процессы. Если ни один не отмечен, отправляет к в настоящее время выбираемому процессу.

Не совсем ответ Вы искали, но близко. Можно также устранить группы процесса или детей с уничтожением, видеть:

https://stackoverflow.com/questions/392022/best-way-to-kill-all-child-processes

16
27.01.2020, 19:55

Из htop страницы справочника:

F5, t Структурный вид: организуйте процессы статусом родителя и расположение отношения между ними как дерево. Переключение ключа переключится между деревом и Вашим ранее выбранным представлением вида. Выбор представления вида выйдет из структурного вида.

Так поражает F5, и Вам, вероятно, придется затем поразить 't'. Это позволит Вам уничтожить все дерево.

1
27.01.2020, 19:55
  • 1
    Это будет только работать, если "дерево" будет неизбежно связано со своим родителем; обратите внимание, что htop показывает группы потока деревьями (в этом случае, ответвления не являются реальными процессами). Иначе дети висячей строки будут повторно порождены init, таким образом, не уничтоженный. –  goldilocks 05.02.2013, 22:36
  • 2
    , который я абсолютно согласовываю, хотя это зависит строго от включенных процессов. Уничтожение ssh древовидной сессии уничтожит базовых детей procs, например; OP не был особенно конкретен относительно того, почему он хотел уничтожить целое дерево. –  Stephan 05.02.2013, 22:59

Вы могли угнать htop s команда. В htop, нажатие s вызывает strace -p <the-pid-of-the-selected-process>.

Затем то, что Вы могли сделать, создают a strace команда, которая содержит что-то как:

#! /bin/sh -
pids=$(ps -eo pid= -o ppid= |
  awk -v exclude="$PPID" -v pid="$2" '
    function descends(p) {
      if (p == exclude) return 0
      if (p == pid) return 1
      if (p <= 1) return 0
      return descends(parent[p])
    }
    { parent[$1]=$2 }
    END {
      for (p in parent)
        if (descends(p))
         print p
    }'
)
if [ -z "$pids" ]; then
  echo >&2 "No process found to kill"
else
  echo >&2 Killing $pids
  kill $pids
fi

И поместите его в некоторый каталог как ~/.htop-hijack, и назовите htop как:

PATH=~/.htop-hijack:$PATH htop

Затем нажатие s вызвал бы ту команду вместо strace (необходимо нажать Esc для возврата к основному экрану впоследствии).

1
27.01.2020, 19:55

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

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

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

2
27.01.2020, 19:55

Теги

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