![pkill beendet keine Prozesse nach den unmittelbaren Nachkommen eines Prozesses](https://rvso.com/image/89151/pkill%20beendet%20keine%20Prozesse%20nach%20den%20unmittelbaren%20Nachkommen%20eines%20Prozesses.png)
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 100
sterben 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
pkill
tut 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 pkill
noch FreeBSD bieten die Möglichkeit, den Prozessbaum zu durchlaufen. Sie können pstree -l
die 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/file
zum 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.