Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在C中计算当前进程的I/O和内存?_C_Linux - Fatal编程技术网

有没有一种方法可以在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记录在页面上。发行版也使用它,但更改需要一些时间才能传播。