如何连续获取某个进程的虚拟存储大小?

如何连续获取某个进程的虚拟存储大小?

我们都知道top命令会持续监控正在运行的进程。我有一个在嵌入式 Linux 中连续运行的应用程序,我需要通过命令监视其 VSZ(虚拟存储大小)值top,我的意思是在应用程序运行时,每个时间段都会获取 VSZ 值并记录它(嗯基本上至少首先获得该值)。在这种情况下如何获取 VSZ 值?在 C/C++、bash 或任何其他方法中可能吗?提前致谢。

答案1

有了Linux内核,可以参考/proc/[PID]/stat(定义在/usr/src/linux/fs/proc/array.c)。它包含许多字段,第 23 个字段是虚拟内存大小(以字节为单位)(请参阅man proc)。

或者,您还可以使用/proc/[PID]/statm仅包含有关内存的值(以页为单位)的值,或者更易于人类阅读的/proc/[PID]/status.

所有这些信息均在 中详细说明man proc

使用cat命令查看这些文件。

答案2

ps -eo vsz,comm可以列出 VSZ 和命令值。然后您可以将其组合到子例程(shell 脚本)中,如下所示:

while true
do
    ps -eo vsz,comm | grep process-i-want >> /path/to/output
    sleep 1
done

如果您想查看并记录输出,也可以替换>> /path/to/output为。| tee /path/to/output

相关内容