Определить архитектуру процесса - PullRequest
7 голосов
/ 29 августа 2009

Есть ли программный способ узнать, какую архитектуру выполняет другой процесс, как в Mac OS X 10.5 и более поздних версиях?

Изучение файла образа процесса не является решением, поскольку изображение, вероятно, будет содержать несколько архитектур, и между арками (1) и флажками «Открыть в Rosetta» и «Открыть в 32-битном режиме» нет никакого способа по одному изображению сказать, какая архитектура на самом деле работает.

Ответы [ 2 ]

6 голосов
/ 03 сентября 2009

Можете ли вы использовать NSRunningApplication в операционных системах, где оно доступно, и использовать sysctl, когда его нет?Я не думаю, что sysctl - это поддерживаемый API, как большинство, но если вы используете его только на старых ОС, у вас должно быть все в порядке.

Попробуйте получить тип процессора для процесса:

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

И проверить CPU_ARCH_ABI64, чтобы проверить наличие 64-разрядных.

2 голосов
/ 29 августа 2009

Вы не говорите, каковы ваши требования, но класс NSRunningApplication , представленный в 10.6, предлагает действительно простой интерфейс для этого. Документы в настоящее время немного не в порядке, но они есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...