确定流程的架构

Pet*_*sey 7 architecture macos process

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

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

Ken*_*Ken 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;
       }
   }
Run Code Online (Sandbox Code Playgroud)

并测试CPU_ARCH_ABI64检查64位.