Mac OS X: Schnellster Weg zu töten / quit einen gesamten Prozessbaum von innerhalb einer Cocoa-Anwendung

StackOverflow https://stackoverflow.com/questions/994033

Frage

Ich weiß, dass es viele Fragen und Antworten zu diesem, aber ich bin für eine effiziente und robuste Lösung. Ich brauche einen Prozess zu beenden und alle ist es Child-Prozesse innerhalb einer Cocoa-Anwendung. Ich habe den Prozess-ID und das, was ich bin zu Code ist den Kill-Befehl wie so

auszuführen
kill -- -<parent PID>

aus meinem app ... aber das scheint schrecklich hacky und brutal zu mir. Gibt es nicht eine bessere Lösung? Carbon Killprocess () und seine Process Manager Freunde scheinen nicht viel helfen, wenn ich einen Prozess Baumdarstellung selbst bauen. Bin ich etwas fehlt?

Ich habe auch einige Code die Quit Apple-Ereignis basierend auf PID zu senden. Es wäre noch schöner zu können, dass für jeden Prozess in dem Baum von einem übergeordneten Prozess, von unten nach oben definiert senden. Aber das ist nur ein nice-to-have. Eine Antwort auf die erste Frage bekommt den „Punkt“.

War es hilfreich?

Lösung

Sie können einfach verwenden killpg den Prozess und alles in seiner Gruppe zu beenden:

#include <signal.h>
#include <unistd.h>

/* ... */

killpg(getpgid(pid), SIGTERM);

Die richtige Fehlerprüfung sollte natürlich getan werden, aber Sie sollten den Kern erhalten. Siehe den Manpages kill(2) und killpg(2) für weitere Informationen.

Andere Tipps

Das letzte Mal, dass ich in diese sah (die vor ein paar Jahren war, aber ich glaube nicht viel geändert hat) die beste Lösung, die ich fand, war nur das System Kill-Befehl aufzurufen.

system( "ps axwww | grep -i CoreServices/Dock.app/Contents/MacOS/Dock | grep -v grep | awk '{print $1}' | xargs kill -3" );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top