pkill beendet keine Prozesse nach den unmittelbaren Nachkommen eines Prozesses

pkill beendet keine Prozesse nach den unmittelbaren Nachkommen eines Prozesses

Ich möchte eine Prozesskette beenden, z. B.

PID  PPID
100  XXX
101  100
102  101

Wenn ich PID 100 und 101 verwende, pkill -P 100sterben sie wie erwartet, aber 102 wird beim Initialisieren als PPID angegeben.

Wie kann ich pkill zwingen, weiterhin verkettete Prozesse nach den unmittelbaren Nachkommen eines Prozesses zu beenden?

Antwort1

pkilltut genau das, was Sie gesagt haben: Es beendet die Prozesse, deren übergeordneter Prozess 100 ist. Nicht die Prozesse, deren übergeordneter Prozess 100 ist.

Weder Linux pkillnoch FreeBSD bieten die Möglichkeit, den Prozessbaum zu durchlaufen. Sie können pstree -ldie Ausgabe aufrufen und analysieren.

Bedenken Sie: Wenn A sich von B abspaltet, B sich von C abspaltet und B dann stirbt, gibt es keine Eltern-Kind-Beziehung mehr, die A und C verbinden kann.

Möglicherweise gibt es eine Möglichkeit, alle diese Prozesse zu beenden, aber seien Sie sich bewusst, dass es dabei zu einer Überschreitung kommen kann.

Wenn Sie eine negative Prozess-ID an übergeben kill, wird der gesamteProzessgruppe. Dies ist atomar, funktioniert also auch, wenn einer der Prozesse sich verzweigt, während Sie gerade ausführen kill. Dadurch werden nur die Prozesse beendet, die sich nicht selbst in eine eigene Gruppe eingeordnet haben, und es werden auch der übergeordnete Prozess und andere beendet, wenn sie sich in derselben Prozessgruppe befinden. Führen Sie es aus, ps -o pgid …um die Prozessgruppen-ID der Prozesse anzuzeigen.

Wenn alle Prozesse, die Sie beenden möchten, eine bestimmte Datei geöffnet haben, können Sie fuser -k /some/filezum Beenden verwendenalledie Prozesse, die diese Datei geöffnet haben.

Eine weitere Möglichkeit unter Linux istFühren Sie die Prozesse in ihrem eigenen PID-Namespace aus. Sie können dann den gesamten Namespace beenden, indem Sie die Pseudo-PGID -1 innerhalb des Namespace beenden.

verwandte Informationen