Programmgesteuert überprüfen, ob ein Prozess auf Mac läuft
Gibt es eine Carbon/Cocoa/C API verfügbar auf Macs, die ich verwenden können, um auflisten von Prozessen? Ich bin auf der Suche nach so etwas wie EnumProcesses
auf Windows.
Mein Ziel ist es zu prüfen von code, ob ein Prozess ausgeführt wird (name).
Dank!
InformationsquelleAutor psychotik | 2010-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige spezifische Implementierungen und details, beachten Sie, dass die proc->kp_proc.p_comm hat ein Zeichen limit, das ist, warum ich bin umgesetzt infoForPID: statt
Kakao :
[NSWorkspace launchedApplications] (10.2+ , veraltet 10.7, sehr begrenzte Prozesse anzeigen)
[NSWorkspace runningApplications] (10.6+ , weniger begrenzt, Prozess-Liste, aber noch nicht darunter daemon-Prozesse)
Carbon :
C: (siehe Technische Q&A QA1123 Erste Liste Aller Prozesse, die auf Mac OS X )
dies ist äquivalent zu verwenden NSArray *runningApp=[[NSWorkspace sharedWorkspace]runningApplications]; und doesnt-Arbeit, um die Liste der Daemon-Prozesse ausgeführt werden.
ja, es ist äquivalent zu runningApplications aber es ist deutlich vollständiger als die Liste von launchedApplications, die C-Ansatz gibt Ihnen die Dämonen zu
kann mir jemand erklären, wie kann man die Speichernutzung dieser Prozess?
Erste, große Antwort. vollständige und ausführliche und erhellende. Zweitens, Es wird irgendetwas gesagt werden, dass GetBSDProcessList (sich verlassen auf) ist ein Beispiel-code genommen von der Apple TechNote. Letzte - es ist ein Speicher Problem, dass die Umsetzung von Apple und einem möglichen Leck in den code hier, der es verwendet. Apple 's Implementierung für einige Grund erfordert, dass" assert(*procList == NULL);", die nicht sofort mit diesem code. Ich weiß nicht, wie es sein sollte!
InformationsquelleAutor valexa
TechZen sagt: Der Prozess-Manager ist, wie der Dezember 2013, vollständig veraltet.
Ah, ich habe gerade die Prozess Manager Referenz
Sieht aus wie
GetNextProcess
undGetProcessInfo
helfen, herauszufinden, was läuft. So der Vorschlag von Dave,GetBSDProcessList
kann verwendet werden, wenn Sie für die Dämonen und nicht nur Carbon/Cocoa-Prozesse.FYI,
GetBSDProcessList
ist sehr schneller als das Durchlaufen der Prozess-Manager selbst.Der Prozess-Manager ist nicht (derzeit) als veraltet markiert und wird in 64-bit. Ich glaube nicht, dass es hat eine Axt über seinen Kopf, wie einige der anderen APIs.
Dies scheint am besten zu sein dokumentiert von all den Optionen, die oben, und ich sehe keine Hinweise in Bezug auf Missbilligung. Für ein one-time-überprüfen der Laufenden Prozesse von jedem Carbon/Cocoa-app (nicht nur der Dock-apps), dies scheint ideal, auch wenn es vielleicht langsamer als andere Optionen.
keine Missbilligung noch, runningApplications wird 10.6 nur diese schauen groß
InformationsquelleAutor psychotik
Gibt es ein paar Möglichkeiten, wie Sie dies tun können:
-[NSWorkspace launchedApplications]
.NSTask
Lesen Sie die Ergebnisse, und Suche nach sich selbst (oder Rohr es durch grep oder so).GetBSDProcessList
hier beschriebenen Funktion: http://developer.apple.com/legacy/mac/library/#qa/qa2001/qa1123.html (ich habe diese verwendet werden, erfolgreich in der Vergangenheit)InformationsquelleAutor Dave DeLong
In der übersicht der NSRunningApplicationClass, es sagt:
und
Ich würde vorschlagen, dass Sie einen Blick auf Workspace Services Themen Der Programmierung
InformationsquelleAutor ericg