Tuer un arbre de processus dans top / htop

12

htop me permet de bien voir les arbres de processus dans le shell. Je peux tuer des processus en appuyant sur F9 (KILL)puis en sélectionnant le signal (par exemple 15 SIGTERM) que je veux envoyer à un travail à tuer.

Cependant, cela ne me permet de tuer qu'un processus à la fois. Existe-t-il un moyen de tuer un arbre complet de processus en utilisant htop?

Amelio Vazquez-Reina
la source

Réponses:

16

De man htop:

COMMANDES INTERACTIVES

Étiquette d' espace ou désélectionner un processus. Les commandes qui peuvent fonctionner sur plusieurs processus, comme "kill", s'appliqueront ensuite sur la liste des processus balisés , au lieu de celui actuellement mis en évidence.

U Détachez tous les processus (supprimez toutes les balises ajoutées avec la touche Espace).

F9, k Processus "Kill": envoie un signal qui est sélectionné dans un menu, à un ou un groupe de processus. Si les processus ont été balisés, envoie le signal à tous les processus balisés. Si aucun n'est marqué, envoie au processus actuellement sélectionné.

Pas tout à fait la réponse que vous cherchiez, mais proche. Vous pouvez également éliminer les groupes de processus ou les enfants avec kill, voir:

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

boucle d'or
la source
1

Depuis la page de manuel htop:

F5, t Arborescence: organisez les processus par parentalité et disposez les relations entre eux comme un arbre. Le basculement de la touche permet de basculer entre l'arborescence et la vue de tri précédemment sélectionnée. La sélection d'une vue de tri quittera l'arborescence.

Alors appuyez sur F5, et vous devrez peut-être ensuite appuyer sur «t». Cela vous permettra de tuer l'arbre entier.

Stephan
la source
1
Cela ne fonctionnera que si «l'arbre» ​​est inévitablement lié à son parent; notez que htop montre les groupes de threads sous forme d'arbres (dans ce cas, les branches ne sont pas de vrais processus). Sinon, les enfants orphelins seront re-parentés par init, donc pas tués.
goldilocks
Je suis absolument d'accord, bien que cela dépende strictement des processus impliqués. Tuer une session d'arbre ssh tuera les procs enfants sous-jacents, par exemple; le PO n'était pas particulièrement précis sur la raison pour laquelle il voulait tuer un arbre entier.
Stephan
1

Vous pourriez détourner htopla scommande. Dans htop, en appuyant sur sinvoque strace -p <the-pid-of-the-selected-process>.

Ensuite, vous pouvez créer une stracecommande contenant quelque chose comme:

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

Et placez-le dans un répertoire comme ~/.htop-hijack, et appelez htop comme:

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

Ensuite, appuyer sur sinvoquerait cette commande au lieu de strace(vous devez appuyer sur Echap pour revenir à l'écran principal par la suite).

Stéphane Chazelas
la source
1

Il y avait une fonctionnalité pour cela depuis longtemps, mais elle manquait dans le manuel jusqu'en 2018: appuyez sur la ctouche pour sélectionner le processus actuellement mis en surbrillance ainsi que tous ses enfants. Ensuite, les opérations qui s'appliquent aux processus sélectionnés (une telle destruction à l'aide de la kclé) s'appliquent au processus et à ses enfants.

Ce n'est pas atomique, cependant. Si de nouveaux enfants sont générés entre le moment où vous appuyez sur cet le moment où le noyau a tué tous les processus, ils ne seront pas tués et finiront très probablement par être rattachés au processus d'initialisation. En effet, htop boucle sur les processus sélectionnés et les tue un par un.

J'ai proposé un correctif pour ajouter une fonctionnalité de destruction de groupe atomique à htop il y a un certain temps, mais l'implémentation n'était pas suffisamment consensuelle pour pouvoir être fusionnée. Avec lui, il est possible de tuer un groupe de processus entier atomiquement de htop. Ce n'est pas exactement la même chose que de tuer un arbre entier, mais AFAIK, le noyau ne fournit aucun moyen de tuer atomiquement un arbre arbitraire.

Arkanosis
la source