有没有一种方法可以在C中计算当前进程的I/O和内存?
如果我使用有没有一种方法可以在C中计算当前进程的I/O和内存?,c,linux,C,Linux,如果我使用 /usr/bin/time -f"%e,%P,%M,%I,%O" 我获取(最后三个占位符)进程使用的内存,以及进程中是否有一些输入和输出 显然,使用sys/time.h很容易获得%e或类似的东西,但是有没有办法以编程方式获得%M、%I和%O文件系统中的文件?您可以读取和解析/proc文件系统中的文件/proc/self指访问/proc文件系统的进程 /proc/self/statm包含有关内存使用的信息,以页为单位。样本输出: % cat /proc/self/statm 1115
/usr/bin/time -f"%e,%P,%M,%I,%O"
我获取(最后三个占位符)进程使用的内存,以及进程中是否有一些输入和输出
显然,使用
sys/time.h
很容易获得%e
或类似的东西,但是有没有办法以编程方式获得%M
、%I
和%O
文件系统中的文件?您可以读取和解析/proc
文件系统中的文件/proc/self
指访问/proc
文件系统的进程
/proc/self/statm
包含有关内存使用的信息,以页为单位。样本输出:
% cat /proc/self/statm
1115 82 63 12 0 79 0
% cat /proc/self/io
rchar: 2012
wchar: 0
syscr: 6
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
字段为size常驻共享文本库数据dt
;有关更多详细信息,请参阅proc
手册页面
/proc/self/io
包含当前进程的I/O。样本输出:
% cat /proc/self/statm
1115 82 63 12 0 79 0
% cat /proc/self/io
rchar: 2012
wchar: 0
syscr: 6
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
不幸的是,
io
没有记录在proc
手册页面中(至少在我的Debian系统上)。我也检查了iotop
源代码,看看它是如何获得每个进程的I/O信息的。您可以fork
、execv
和管道
。尽管@esorton's是正确的方式。谢谢。这很有效。做了更多的研究,我发现getrusage。这正是usr/bin/time
报告的内容,有了RUSAGE\u SELF
,好了。@DervinThunk好发现;我不知道那个命令。对于您想要做的事情来说,这似乎是一个更好的解决方案。关于内核和核心C库的内容,最好参考上游手册页()<代码>/proc/[PID]/io记录在页面上。发行版也使用它,但更改需要一些时间才能传播。