2009-08-29 6 views
7

Esiste un modo programmatico per scoprire quale architettura è in esecuzione un altro processo come in Mac OS X 10.5 e versioni successive?Determina l'architettura di un processo

L'analisi del file di immagine del processo non è una soluzione, poiché l'immagine probabilmente contiene più architetture e tra le caselle di controllo arch (1) e "Apri in Rosetta" e "Apri in modalità a 32 bit" non c'è modo di distinguere solo dall'immagine che l'architettura è effettivamente in esecuzione.

+1

Decisamente ci dovrebbe essere ... Activity Monitor fa esattamente questo. –

risposta

6

È possibile utilizzare NSRunningApplication sui sistemi operativi in ​​cui è disponibile e ricorrere a sysctl quando non lo è? Non penso che la roba di sysctl sia un'API supportata come la maggior parte delle cose, ma se la stai usando solo sui vecchi SO dovresti stare bene.

Prova questo per ottenere il tipo di CPU del processo:

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; 
     } 
    } 

E prova CPU_ARCH_ABI64 per verificare la presenza di 64-bit.

+0

'sysctl' è l'API supportata. Sembra promettente; Ti farò sapere come va quando avrò la possibilità di provarlo (occupato con cose più urgenti al momento). –

+1

La funzione 'sysctl' non sta andando da nessuna parte. La roba nella pagina man non sta andando da nessuna parte. Ma se si esegue 'sysctl -a', si vede un sacco di altre cose, incluso questo. Questi non sono necessariamente supportati. – Ken

+0

Proprio quello di cui avevo bisogno. Grazie! –

2

Non si dice quali siano le vostre esigenze, ma la classe NSRunningApplication introdotta in 10.6 offre un'interfaccia davvero semplice per questo. I documenti sono attualmente un po 'fuori, ma è lì.

+0

Sembra carino. Sfortunatamente, sto prendendo di mira Leopard. Ho modificato la mia domanda per includerla. –

Problemi correlati