确定流程的架构

时间:2009-08-29 01:43:22

标签: macos architecture process

是否有一种编程方式可以找出在Mac OS X 10.5及更高版本上运行其他进程的架构?

检查进程的映像文件不是解决方案,因为映像可能包含多个体系结构,并且在arch(1)和“在Rosetta中打开”和“在32位模式下打开”复选框之间,没有办法从图像中分辨出哪个架构实际上正在运行。

2 个答案:

答案 0 :(得分:6)

你可以在可用的操作系统上使用NSRunningApplication,如果没有,可以回到sysctl的东西吗?我认为sysctl的东西不像大多数东西那样是可支持的API,但如果你只是在旧操作系统上使用它,你应该没问题。

尝试此操作以获取进程的CPU类型:

   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位。

答案 1 :(得分:2)

您没有说明您的要求,但10.6中引入的NSRunningApplication类为此提供了一个非常简单的界面。文档目前有点偏,但它就在那里。