我需要获取 Mac 的实际架构,无论该进程是否通过 Rosetta 运行。
现在在 Node.js 中,process.arch
返回 x64
,在 shell 中,uname -m
返回 x86_64
。
我需要获取 Mac 的实际架构,无论该进程是否通过 Rosetta 运行。
现在在 Node.js 中,process.arch
返回 x64
,在 shell 中,uname -m
返回 x86_64
。
感谢@Ouroborus,这个说明描述了如何确定您的应用程序是否已翻译。
如果已翻译:
$ sysctl sysctl.proc_translated
sysctl.proc_translated: 1
如果不是:
$ sysctl sysctl.proc_translated
sysctl.proc_translated: 0
在非ARM架构的Mac电脑上:
$ sysctl sysctl.proc_translated
sysctl: unknown oid 'sysctl.proc_translated'
sysctl -n sysctl.proc_translated
。 -n
将使 sysctl
仅打印该值。 - Zach Bloomquistsysctl -in sysctl.proc_translated
。这将仅打印该值而不显示错误消息。 - John Yearysysctl -n sysctl.proc_translated
或本机等效的sysctlbyname()
调用将指示您是否在Rosetta下运行。sysctl
值是相关的。 在没有Rosetta的M1硬件上,返回这些值:hw.cputype: 16777228
hw.cpufamily: 458787763
hw.cputype: 7
hw.cpufamily: 1463508716
0x7
(CPU_TYPE_X86)和0x573b5eec
(INTEL_WESTMERE)。IOService
平面实时收集数据,但IODeviceTree
平面在启动时存储,并将这些条目包含在树中(命令行ioreg -p IODeviceTree
或ioreg -c IOPlatformDevice
)。cpu0@0 <class IOPlatformDevice, id 0x10000010f, registered, matched, active, busy 0 (180 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,icestorm","ARM,v8">
cpu4@100 <class IOPlatformDevice, id 0x100000113, registered, matched, active, busy 0 (186 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,firestorm","ARM,v8">