检查正在运行的进程是 32 位还是 64 位

Posted

技术标签:

【中文标题】检查正在运行的进程是 32 位还是 64 位【英文标题】:Check if a running process is 32 or 64 bit 【发布时间】:2013-09-26 02:17:52 【问题描述】:

如何确定指定进程在 Windows、Mac 和 Linux 上是 32 位还是 64 位。

LinuxMac 我有一个进程的 pid。我在想,如果系统本身是 64 位的,那么应用程序应该是 64 位的,与 32 位相同。但是听说64位Linux和Mac也可以运行32位应用程序。我可以做些什么来确定?

Windows 上,我有一个进程句柄。目前我正在使用 IsWow64Process。它是否正确? (编辑:是的,它是正确的,但需要与GetNativeSystemInfo 一起使用以查看操作系统是否为 64 位)。

编辑:对于 Mac,请参阅 this 问题。

【问题讨论】:

【参考方案1】:

在 OS X 上,ps 的标志值包含一个指示 64 位模式的位:

$ ps -oflags= [PID]
        4004

来自 ps 手册页:

 flags     The flags associated with the process as in the include file
           <sys/proc.h>:

           P_ADVLOCK           0x00001      Process may hold a POSIX
                                            advisory lock
           P_CONTROLT          0x00002      Has a controlling terminal
           P_LP64              0x00004      Process is LP64
           P_NOCLDSTOP         0x00008      No SIGCHLD when children stop
           [etc...]

...所以如果标志值的最后一位数字是 4、5、6、7、c、d、e 或 f,则它以 LP64(即 64 位)模式运行。在上面的例子中,flags=4004,所以列出的进程是64位的。

【讨论】:

不完全是答案,但它让我走上了正轨。原始问题中的其他详细信息。 要查找所有在 32 位模式下运行的进程运行 ps aux -oflags | grep '[01238ab]$'【参考方案2】:

使用文件:

file -L /proc/[PID]/exe

【讨论】:

不知道MacOS有没有/proc/[PID]/exe。我确定 Windows 不会。 Windows 和 Mac 没有。我将 libproc 用于 Mac 上的其他内容。

以上是关于检查正在运行的进程是 32 位还是 64 位的主要内容,如果未能解决你的问题,请参考以下文章

如何检查给定地址是 32 位还是 64 位?

检测目标程序ELF bit是32还是64

如何从 32 位进程启动 64 位进程

MySQL:检查啥版本:32 位还是 64 位?

Win32 32 位进程加载 64 位 kernel32.dll

32 位与 64 位 Windows 版本上的进程大小和行为差异