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