有没有一种编程方法可以找出Mac OS X 10.5及更高版本上另一个进程正在运行的体系结构?确定进程的体系结构
检查进程的映像文件不是一个解决方案,因为该映像可能包含多个体系结构,并且在arch(1)和“Rosetta打开”和“32位模式打开”复选框之间,没有从图像中单独告诉哪个架构实际运行。
有没有一种编程方法可以找出Mac OS X 10.5及更高版本上另一个进程正在运行的体系结构?确定进程的体系结构
检查进程的映像文件不是一个解决方案,因为该映像可能包含多个体系结构,并且在arch(1)和“Rosetta打开”和“32位模式打开”复选框之间,没有从图像中单独告诉哪个架构实际运行。
你可以在可用的操作系统上使用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位。
'sysctl'支持API。看起来很有希望;一旦我有机会尝试一下,我会让你知道它是如何发生的(忙于更紧迫的事情)。 – 2009-09-03 09:34:59
'sysctl'函数没有去任何地方。手册页中的内容不会去任何地方。但是如果你使用'sysctl -a',你会看到很多其他的东西,包括这个。这些不一定支持。 – Ken 2009-09-03 14:31:26
正是我需要的。谢谢! – 2010-12-03 18:39:39
你不会说你的要求是什么,但在10.6中引入的NSRunningApplication类为此提供了一个非常简单的接口。文档目前有点偏离,但它在那里。
看起来不错。不幸的是,我瞄准了Leopard。我编辑了我的问题来包含这一点。 – 2009-08-29 02:04:39
绝对应该有...活动监视器正是这样做的。 – 2009-08-29 01:44:46