In einigen Fällen wird beim Senden eines SIGTERM an einen Prozess SIGTERM an alle untergeordneten Prozesse gesendet. Manchmal funktioniert dies jedoch nicht.
Gibt es einen Befehl oder ein Dienstprogramm, mit dem ich einen Prozess und alle untergeordneten Prozesse gleichzeitig beenden kann? Normalerweise sammle ich alle Pids manuell zu einem Kill-Befehl, aber das fühlt sich dumm an.
In dieser SO-Frage wird gefragt, wie dies mit Perl geschehen soll, aber alles, was die Arbeit erledigt, wäre großartig.
pkill -9
mächtiger aus alspkill
, aus welchem Grund auch immer.Antworten:
Diese SO-Frage deckt dies ab.
quelle
Angenommen, die Prozesse haben eine Sitzungskennung gemeinsam (die sie verwenden sollten, sofern sie nicht ausdrücklich setsid () aufgerufen haben), können Sie sie mit pkill durch eine Sitzung beenden:
Wenn ich von einem anderen Terminal aus Folgendes tue:
Dann stirbt alles auf einen Schlag.
Sie können auf ähnliche Weise nach Prozessgruppen töten, obwohl dies für viele Kinder, die sich alle eine Ebene unter einem übergeordneten Element befinden, sinnvoller ist, als für eine Kette von zugeordneten Prozessen.
quelle
Normalerweise sollte ein antwortender Client ein sigterm erhalten und sich selbst ausschalten, wodurch alle seine untergeordneten Prozesse beendet werden. Wenn der Client andererseits nicht antwortet, wird ein normales Beendigungssignal wahrscheinlich keine Antwort hervorrufen.
Dann senden Sie einen SIGKILL, der das System selbst anweist, den Prozess jetzt zu stoppen. Dies ist in den meisten Fällen möglich, es sei denn, der Prozess befindet sich in einem unterbrechungsfreien Ruhezustand, z. B. wenn auf eine E / A gewartet wird eingang oder ähnliches.
In diesem Fall wird sogar der SIGKILL am Ende nichts mit dem Prozess anfangen. Der untergeordnete Prozess wird wahrscheinlich in einem ähnlichen Stadium der Verzögerung sein.
Es gibt einen Grenzfall, in dem der übergeordnete Prozess möglicherweise ordnungsgemäß beendet wird, der untergeordnete Prozess jedoch nicht beendet werden kann. Dann werden Sie mit einem Zombie-Prozess enden, der nicht bereinigt werden kann, da sein Vater weg ist, aber auf nichts reagiert. Der einzige Weg, diese zu beseitigen, ist ein Neustart. In den meisten Fällen sind sie jedoch ziemlich harmlos, da sie lediglich eine PID aufnehmen, während die von ihnen verwendete Steckdose bereits verblasst ist.
quelle
Wenn ich den Prozessbaum von Firefox beenden möchte, ist es möglich, ihn mit dem obigen Befehl "pkill -9 -s firefox" zu beenden.
quelle