Einen Baum von Prozessen in top / htop töten

12

Mit htop kann ich Bäume von Prozessen in der Shell gut sehen. Ich kann Prozesse beenden, F9 (KILL)indem ich drücke und dann auswähle, welches Signal (z. B. 15 SIGTERM) ich zum Beenden an einen Job senden möchte.

Dadurch kann ich jedoch jeweils nur einen Prozess beenden. Gibt es eine Möglichkeit, einen vollständigen Baum von Prozessen mit zu töten htop?

Amelio Vazquez-Reina
quelle

Antworten:

16

Von man htop:

INTERAKTIVE BEFEHLE

Raum Tag oder untag ein Prozess. Befehle, die mit mehreren Prozessen ausgeführt werden können, z. B. "kill", werden dann auf die Liste der markierten Prozesse angewendet , anstatt auf den aktuell hervorgehobenen.

U Deaktivieren Sie alle Prozesse (entfernen Sie alle mit der Leertaste hinzugefügten Tags).

F9, k "Kill" -Prozess: Sendet ein in einem Menü ausgewähltes Signal an einen oder eine Gruppe von Prozessen. Wenn Prozesse markiert wurden, wird das Signal an alle markierten Prozesse gesendet. Wenn keine markiert ist, wird an den aktuell ausgewählten Prozess gesendet.

Nicht ganz die Antwort, nach der Sie gesucht haben, aber nah dran. Sie können auch Prozessgruppen oder Kinder mit Tötung eliminieren, siehe:

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

Goldlöckchen
quelle
1

Von der htop-Manpage:

F5, t Baumansicht: Organisieren Sie Prozesse nach Elternschaft und gestalten Sie die Beziehungen zwischen ihnen als Baum. Durch Umschalten der Taste wird zwischen dem Baum und Ihrer zuvor ausgewählten Sortieransicht gewechselt. Durch Auswahl einer Sortieransicht wird die Baumansicht beendet.

Drücken Sie also F5, und Sie müssen möglicherweise 't' drücken. So kannst du den ganzen Baum töten.

Stephan
quelle
1
Dies funktioniert nur, wenn der "Baum" unweigerlich an sein übergeordnetes Element gebunden ist. Beachten Sie, dass htop Thread-Gruppen als Bäume anzeigt (in diesem Fall sind die Zweige keine realen Prozesse). Andernfalls werden die Waisenkinder von init wiedererzogen und nicht getötet.
Goldlöckchen
Ich stimme absolut zu, obwohl dies streng von den beteiligten Prozessen abhängt. Wenn Sie eine SSH-Baumsitzung beenden, werden beispielsweise zugrunde liegende Kinderprozesse getötet. Das OP war nicht besonders genau darüber informiert, warum er einen ganzen Baum töten wollte.
Stephan
1

Sie könnten htopden sBefehl entführen . In htopwird durch Drücken von saufgerufen strace -p <the-pid-of-the-selected-process>.

Dann können Sie einen straceBefehl erstellen, der Folgendes enthält:

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

Und legen Sie es in ein Verzeichnis wie ~/.htop-hijackund rufen Sie htop auf als:

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

sWenn straceSie dann drücken , wird dieser Befehl anstelle von aufgerufen (Sie müssen Esc drücken, um anschließend zum Hauptbildschirm zurückzukehren).

Stéphane Chazelas
quelle
0

Es gibt seit langem eine Funktion dafür, die jedoch bis 2018 im Handbuch fehlte: Drücken Sie die cTaste, um den aktuell hervorgehobenen Prozess sowie alle untergeordneten Prozesse auszuwählen. Dann gelten Operationen, die für ausgewählte Prozesse gelten (z. B. das Beenden mit dem kSchlüssel), für den Prozess und seine untergeordneten Prozesse.

Dies ist jedoch nicht atomar. Wenn neue Kinder zwischen dem Moment, in dem Sie drücken, cund dem Moment, in dem der Kernel alle Prozesse beendet hat, erzeugt werden, werden sie nicht getötet und höchstwahrscheinlich wieder mit dem Init-Prozess verbunden. Dies liegt daran, dass htop die ausgewählten Prozesse wiederholt und nacheinander beendet.

Ich habe vor einiger Zeit einen Patch vorgeschlagen , um htop eine Funktion zum Töten von Atomgruppen hinzuzufügen, aber die Implementierung war nicht einvernehmlich genug, um sie zusammenzuführen. Damit ist es möglich, eine ganze Prozessgruppe atomar von htop abzutöten. Das ist nicht genau das Gleiche wie das Töten eines ganzen Baumes, aber AFAIK, der Kernel bietet keine Möglichkeit, einen beliebigen Baum atomar zu töten.

Arkanose
quelle