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

C++ 检查正在运行的进程是32位还是64位,c++,linux,windows,macos,process,C++,Linux,Windows,Macos,Process,如何确定在Windows、Mac和Linux上指定的进程是32位还是64位 在Linux和Mac上,我有一个进程的pid。我认为如果系统本身是64位的,那么应用程序应该是64位的,与32位相同。但我听说64位Linux和Mac也可以运行32位应用程序。我能做些什么来确定呢 在窗口上我有一个进程句柄。目前我正在使用ISWOW64进程。这是正确的吗?(编辑:是,它是正确的,但需要与一起使用,以查看操作系统是否为64位) 编辑:有关Mac,请参见问题。使用文件: file -L /proc/[PID]

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

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

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

编辑:有关Mac,请参见问题。

使用文件:

file -L /proc/[PID]/exe

在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...]
将与进程关联的标志标记为包含文件中的标志
:
P_ADVLOCK 0x00001进程可能持有POSIX
顾问锁
P_CONTROLT 0x00002有一个控制终端
P_LP64 0x00004进程为LP64
当儿童停止时,P_NOCLDSTOP 0x00008无信号
[等等]

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

我不知道MacOS是否有
/proc/[PID]/exe
。我肯定Windows不会。Windows和Mac不会。我在Mac上使用libproc处理其他东西。答案并不完全正确,但它让我走上了正确的轨道。原始问题中的其他详细信息。要查找以32位模式运行的所有进程,请运行
ps aux-oflags | grep'[01238ab]$'