是否有一种编程方式可以找出在Mac OS X 10.5及更高版本上运行其他进程的架构?
检查进程的映像文件不是解决方案,因为映像可能包含多个体系结构,并且在arch(1)和“在Rosetta中打开”和“在32位模式下打开”复选框之间,没有办法从图像中分辨出哪个架构实际上正在运行。
答案 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类为此提供了一个非常简单的界面。文档目前有点偏,但它就在那里。