Ich möchte einen ganzen Prozessbaum töten. Wie kann ich das am besten mit einer der gängigen Skriptsprachen erreichen? Ich bin auf der Suche nach einer einfachen Lösung.
Antworten
Zu viele Anzeigen?Um die Antwort von Norman Ramsey zu ergänzen, kann es sich lohnen, einen Blick auf setsid zu werfen, wenn Sie eine Prozessgruppe erstellen möchten.
http://pubs.opengroup.org/onlinepubs/009695399/functions/setsid.html
Die Funktion setsid() erzeugt eine neue Sitzung, wenn der aufrufende Prozess nicht der Anführer einer Prozessgruppe ist. Bei Rückkehr ist der aufrufende Prozess der der Sitzungsleiter dieser neuen Sitzung, ist der Prozessgruppenleiter Leiter einer neuen Prozessgruppe und darf kein kontrollierendes Terminal haben. Die Prozessgruppen-ID des aufrufenden Prozesses wird gleich der Prozess-ID des aufrufenden Prozesses. Die Adresse aufrufende Prozess muss der einzige sein, der Prozess in der neuen Prozessgruppe und der einzige Prozess in der neuen Sitzung.
Daraus schließe ich, dass Sie eine Gruppe aus dem Startprozess heraus erstellen können. Ich habe dies in php benutzt, um einen ganzen Prozessbaum nach dem Start zu beenden.
Das könnte eine schlechte Idee sein. Ich wäre an Kommentaren interessiert.
Inspiriert durch Kommentar von ysth
kill -- -PGID
statt einer Prozessnummer die Negation der Gruppe angeben Nummer. Wie bei fast allen Befehlen gilt: Wenn Sie ein normales Argument wollen, das mit einer
-
nicht als Schalter interpretiert werden soll, stellen Sie ihm das Wort--
Es ist super einfach, dies mit Python zu tun, indem man psutil . Installieren Sie einfach psutil mit pip und schon haben Sie eine ganze Reihe von Werkzeugen zur Prozessmanipulation:
def killChildren(pid):
parent = psutil.Process(pid)
for child in parent.get_children(True):
if child.is_running():
child.terminate()