Matar un árbol de procesos en top / htop

12

htop me permite ver muy bien los árboles de procesos dentro del shell. Puedo matar procesos presionando F9 (KILL)y luego seleccionando qué señal (por ejemplo 15 SIGTERM) quiero enviar a un trabajo para matar.

Sin embargo, esto solo me permite matar un proceso a la vez. ¿Hay alguna manera de matar un árbol completo de procesos usando htop?

Amelio Vazquez-Reina
fuente

Respuestas:

16

De man htop:

COMANDOS INTERACTIVOS

Espacio de la etiqueta o de un proceso de untag. Los comandos que pueden operar en múltiples procesos, como "kill", se aplicarán sobre la lista de procesos etiquetados , en lugar del resaltado actualmente.

U Desagrupe todos los procesos (elimine todas las etiquetas agregadas con la tecla Espacio).

F9, k Proceso "Kill": envía una señal que se selecciona en un menú a uno o un grupo de procesos. Si los procesos fueron etiquetados, envía la señal a todos los procesos etiquetados. Si ninguno está etiquetado, se envía al proceso seleccionado actualmente.

No es exactamente la respuesta que buscabas, pero está cerca. También puede eliminar grupos de procesos o niños con kill, consulte:

/programming/392022/best-way-to-kill-all-child-processes

encerrada dorada
fuente
1

Desde la página de manual de htop:

F5, t Vista de árbol: organice los procesos por paternidad y diseñe las relaciones entre ellos como un árbol. Al alternar la tecla se cambiará entre el árbol y la vista de clasificación previamente seleccionada. Al seleccionar una vista de clasificación, saldrá de la vista de árbol.

Entonces presione F5, y es posible que deba presionar 't'. Eso te permitirá matar todo el árbol.

Stephan
fuente
1
Esto solo funcionará si el "árbol" está inevitablemente unido a su padre; tenga en cuenta que htop muestra los grupos de hilos como árboles (en cuyo caso, las ramas no son procesos reales). De lo contrario, los niños huérfanos serán criados nuevamente por init, por lo que no serán asesinados.
Ricitos de oro
Estoy totalmente de acuerdo, aunque esto depende estrictamente de los procesos involucrados. Matar una sesión de árbol ssh matará los procesos hijos subyacentes, por ejemplo; El OP no fue particularmente específico sobre por qué quería matar a un árbol entero.
Stephan
1

Podrías secuestrar htopel scomando. En htop, presionando sinvoca strace -p <the-pid-of-the-selected-process>.

Entonces, lo que podría hacer es crear un stracecomando que contenga 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

Y colóquelo en algún directorio como ~/.htop-hijack, y llame a htop como:

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

Luego, presionar sinvocaría ese comando en lugar de strace(debe presionar Esc para volver a la pantalla principal después).

Stéphane Chazelas
fuente
1

Ha habido una característica para esto durante mucho tiempo, pero faltaba en el manual hasta 2018: presione la ctecla para seleccionar el proceso actualmente resaltado, así como todos sus elementos secundarios. Luego, las operaciones que se aplican a los procesos seleccionados (como matar con la ktecla) se aplican al proceso y a sus hijos.

Sin embargo, esto no es atómico. Si se generan nuevos hijos entre el momento en que presiona cy el momento en que el kernel ha eliminado todos los procesos, no se eliminarán y lo más probable es que se vuelvan a unir al proceso init. Esto se debe a que htop realiza un bucle en los procesos seleccionados y los mata uno por uno.

Hace un tiempo propuse un parche para agregar una función de destrucción de grupos atómicos a htop, pero la implementación no fue lo suficientemente consensuada para que se fusionara. Con él, es posible matar atómicamente todo un grupo de procesos desde htop. Eso no es exactamente lo mismo que matar un árbol completo, pero AFAIK, el núcleo no proporciona ninguna forma de matar un árbol arbitrario atómicamente.

Arkanosis
fuente