我想在 AIX 上获取进程状态,就像我们在 Linux 上获取它一样,我没有在文件/proc/<PID>/stat
中找到状态。/proc/<PID>/status
那里有一些加密文本。我应该在 AIX 上访问哪个文件来获取特定进程的状态?
答案1
AIX 的内容/proc/<PID>/status
应按照包含文件struct pstatus
中的定义进行结构化。<sys/procfs.h>
据我所知,文件结构没有标准/proc/<PID>/*
,因此所有读取/proc
都应被视为特定于操作系统的代码。不要期望在任何其他操作系统中的 Linux 中找到的每个数据元素都有严格的一对一映射/proc
:数据的排列方式可能非常不同,或者某些数据元素可能完全丢失。
请参阅 IBM 文档:https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/filesreference/proc.html
对于 C API,基本上,读/proc/<PID>/status
入合适大小的缓冲区(或mmap()
它),将缓冲区/mmap 指针转换为(struct pstatus *)
并使用它来访问数据元素。
根据您想要的状态信息,您可能需要读取同一目录中的其他文件,使用它们的等效结构类型来访问数据元素。
答案2
答案3
这也许应该是一个评论 - 但我没有足够的“地位”来做到这一点,叹息...... - 所以试图提供一个答案的起点!
“就像我们在 Linux 上一样......”对于 AIX 人员来说并不算什么。我尝试过一些简单的事情:“其他”状态是您会接受的答案吗?
我在 Linux 服务器上尝试过:
root@x064:[/data]cat /proc/1/status
▒▒/▒0▒0▒;▒
▒▒▒9▒E▒4▒œOTHER
root@x064:[/data]
root@x064:[/data/prj/gnu/less-481]strings /proc/1/status
OTHER
在 AIX 上,它看起来类似:
michael@x071:[/home/michael]cat /proc/1/status
dò0ò0 ~5!(FiË3ãú¤ÀOTHER
michael@x071:[/home/michael]strings /proc/1/status
!(Fi
Ë3ãú
OTHER
恕我直言 - 字符串!(Fi 和 Ë3ãú 只是看起来像字符串,但只是“显示为字符串的正常状态”
查看 /proc 时应使用的命令是:
michael@x071:[/home/michael]ls -l /usr/bin/proc*
-r-xr-xr-x 1 bin bin 8462 Jan 12 2015 /usr/bin/proccred
-r-xr-xr-x 1 bin bin 23820 Jan 12 2015 /usr/bin/procfiles
-r-xr-xr-x 1 bin bin 14852 Jan 12 2015 /usr/bin/procflags
-r-xr-xr-x 1 bin bin 11222 Jan 12 2015 /usr/bin/procldd
-r-xr-xr-x 1 bin bin 20884 Jan 12 2015 /usr/bin/procmap
-r-xr-xr-x 1 bin bin 8274 Jan 12 2015 /usr/bin/procrun
-r-xr-xr-x 1 bin bin 8974 Aug 06 2011 /usr/bin/procsig
-r-xr-xr-x 1 bin bin 24534 Jan 29 2015 /usr/bin/procstack
-r-xr-xr-x 1 bin bin 8502 Jan 12 2015 /usr/bin/procstop
-r-xr-xr-x 1 bin bin 34888 Jan 12 2015 /usr/bin/proctree
-r-xr-xr-x 1 bin bin 13612 Jan 12 2015 /usr/bin/procwait
-r-xr-xr-x 1 bin bin 9158 Jan 12 2015 /usr/bin/procwdx