C中当前进程的内存使用情况
我需要用 C 语言获取当前进程的内存使用情况。有人可以提供如何在 Linux 平台上执行此操作的代码示例吗?
我知道 cat /proc/
获取内存使用情况的方法,但我不知道如何在 C 中捕获它。
顺便说一句,它用于 PHP 扩展我正在修改(当然,我是 C 新手)。如果 PHP 扩展 API 中有可用的快捷方式,那就更有帮助了。
I need to get the memory usage of the current process in C. Can someone offer a code sample of how to do this on a Linux platform?
I'm aware of the cat /proc/<your pid>/status
method of getting memory usage, but I have no idea how to capture that in C.
BTW, it's for a PHP extension I'm modifying (granted, I'm a C newbie). If there are shortcuts available within the PHP extension API, that would be even more helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
getrusage 库函数返回一个结构,其中包含有关当前进程的大量数据,包括:
但是,最新的 linux 文档介绍了这 3 个字段
,手册将其定义为:
请参阅 getrusage(2)
The
getrusage
library function returns a structure containing a whole lot of data about the current process, including these:However, the most up-to-date linux documentation says about these 3 fields
which the manual then defines as:
See getrusage(2)
您始终可以像打开常规文件一样打开
/proc
系统中的“文件”(使用“self”符号链接,这样您就不必查找自己的 pid):当然,您现在必须解析该文件以挑选出您需要的信息。
You can always just open the 'files' in the
/proc
system as you would a regular file (using the 'self' symlink so you don't have to look up your own pid):Of course, you now have to parse the file to pick out the information you need.
这是一种获取内存使用情况的非常丑陋且不可移植的方法,但由于 getrusage() 的内存跟踪在 Linux 上基本上没有用,因此读取 /proc//statm 是我所知道的获取内存使用情况的唯一方法有关 Linux 的信息。
如果有人知道更干净的、或者最好是更跨 Unix 的跟踪内存使用情况的方法,我将非常有兴趣学习如何进行。
从 proc(5) 手册页:
This is a terribly ugly and non-portable way of getting the memory usage, but since getrusage()'s memory tracking is essentially useless on Linux, reading /proc/<pid>/statm is the only way I know of to get the information on Linux.
If anyone know of cleaner, or preferably more cross-Unix ways of tracking memory usage, I would be very interested in learning how.
From the proc(5) man-page:
我发现了这篇文章: http: //appcrawler.com/wordpress/2013/05/13/simple-example-of-tracking-memory-using-getrusage/
简化版:(
在Linux 3.13中测试)
I came across this post: http://appcrawler.com/wordpress/2013/05/13/simple-example-of-tracking-memory-using-getrusage/
Simplified version:
(tested in Linux 3.13)
我迟到了,但这可能对其他在 Linux 上寻找驻留和虚拟(以及迄今为止的峰值)内存的人有帮助。
这可能非常糟糕,但它完成了工作。
I'm late to the party, but this might be helpful for anyone else looking for the resident and virtual (and their peak values so far) memories on linux.
It's probably pretty terrible, but it gets the job done.
我使用了这段代码,但由于某种原因,我所有 4 个 printf() 始终得到 0
I used this code but for some reason I get 0 all the time for all 4 printf()