Matando uma árvore de processos no top / htop

8

htop me permite ver árvores de processos dentro do shell. Eu posso matar processos pressionando F9 (KILL) e, em seguida, selecionando qual sinal (por exemplo, 15 SIGTERM ) eu quero enviar para um trabalho para matar.

No entanto, isso só me permite matar um processo de cada vez. Existe uma maneira de matar uma árvore completa de processos usando htop ?

    
por Amelio Vazquez-Reina 05.02.2013 / 20:44

3 respostas

12

De man htop :

INTERACTIVE COMMANDS

Space Tag or untag a process. Commands that can operate on multiple processes, like "kill", will then apply over the list of tagged processes, instead of the currently highlighted one.

U Untag all processes (remove all tags added with the Space key).

F9, k "Kill" process: sends a signal which is selected in a menu, to one or a group of processes. If processes were tagged, sends the signal to all tagged processes. If none is tagged, sends to the currently selected process.

Não é bem a resposta que você estava procurando, mas próxima. Você também pode eliminar grupos de processos ou filhos com kill, veja:

link

    
por 05.02.2013 / 21:27
1

Do manpage do htop:

F5, t Visão de árvore: organize os processos por paternidade e organize as relações entre eles como uma árvore. A alternância da chave alternará entre a árvore e sua exibição de classificação selecionada anteriormente. Selecionar uma exibição de classificação sairá da exibição em árvore.

Então aperte F5, e você pode ter que clicar em 't'. Isso vai deixar você matar a árvore inteira.

    
por 05.02.2013 / 21:26
1

Você pode seqüestrar o comando htop s. Em htop , pressionar s invoca strace -p <the-pid-of-the-selected-process> .

Então, o que você poderia fazer é criar um comando strace que contenha algo como:

#! /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

E coloque-o em algum diretório como ~/.htop-hijack e chame o htop como:

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

Em seguida, pressionar s invocaria esse comando em vez de strace (você precisa pressionar Esc para retornar à tela principal posteriormente).

    
por 05.02.2013 / 22:27

Tags