有沒有一種編程方法可以找出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