7 Stimmen

Bestimmen Sie die Architektur eines Prozesses

Gibt es einen programmatischen Weg, um herauszufinden, unter welcher Architektur ein anderer Prozess unter Mac OS X 10.5 und später läuft?

Die Untersuchung der Abbilddatei des Prozesses ist keine Lösung, da das Abbild wahrscheinlich mehrere Architekturen enthält, und zwischen arch(1) und den Kontrollkästchen "In Rosetta öffnen" und "Im 32-Bit-Modus öffnen" gibt es keine Möglichkeit, allein aus dem Abbild zu erkennen, welche Architektur tatsächlich läuft.

6voto

Ken Punkte 12823

Können Sie NSRunningApplication auf Betriebssystemen verwenden, wo es verfügbar ist, und auf sysctl-Zeug zurückgreifen, wenn es nicht verfügbar ist? Ich glaube nicht, dass sysctl Zeug ist unterstützbar API die Art und Weise die meisten Dinge ist, aber wenn Sie nur es auf alten Betriebssystemen verwenden, sollten Sie in Ordnung sein.

Versuchen Sie dies, um den CPU-Typ des Prozesses zu ermitteln:

   cpu_type_t  cpuType
   size_t      cpuTypeSize;
   int         mib[CTL_MAXNAME];
   size_t      mibLen;
      mibLen  = CTL_MAXNAME;
   err = sysctlnametomib("sysctl.proc_cputype", mib, &mibLen);
   if (err == -1) {
       err = errno;
   }
   if (err == 0) {
       assert(mibLen < CTL_MAXNAME);
       mib[mibLen] = pid;
       mibLen += 1;

       cpuTypeSize = sizeof(cpuType);
       err = sysctl(mib, mibLen, &cpuType, &cpuTypeSize, 0, 0);
       if (err == -1) {
           err = errno;
       }
   }

Und Test CPU_ARCH_ABI64 um auf 64-Bit zu prüfen.

2voto

Chuck Punkte 228137

Sie sagen nicht, was Ihre Anforderungen sind, aber die NSRunningApplication Klasse, die in 10.6 eingeführt wurde, bietet eine wirklich einfache Schnittstelle für diese Aufgabe. Die Dokumentation ist derzeit ein wenig unvollständig, aber sie ist vorhanden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X