我想跟踪给定命令 执行的磁盘 io。 getrusage()
可以在C中使用;我能以某种方式在命令行中获得相同的结果吗?
time
和 times
显示用户和系统花费的时间,后者包括自己/ child 的故障,所有其他位如何,如磁盘 io、spwap、峰值内存?
一个例子:
[user@hsot ~]$ time sqlite3 haha.db vacuum
real 1m6.439s
user 0m7.407s
sys 0m10.000s
# what I'd like in addition
blocks in 1228349
blocks out 34523
maxrss 45634953
...
最佳答案
理想情况下,像这样的东西应该内置到 bash(或您正在使用的任何 shell)中。不幸的是,AFAIK 没有这样的东西。
但是使用 getrusage() 创建自己的包装器是微不足道的:
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
int main(int argc, char** argv) {
system(argv[1]);
struct rusage ru;
getrusage(RUSAGE_CHILDREN, &ru);
printf("\nblocks in:\t%li\nblocks out:\t%li\nmaxrss:\t\t%li\n",
ru.ru_inblock, ru.ru_oublock, ru.ru_maxrss);
}
编译它:
$ gcc -o process_io process_io.c
并使用它:
$ ./process_io "dd if=/dev/urandom of=foobar bs=1k count=10000"
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.922149 s, 11.1 MB/s
blocks in: 0
blocks out: 80128
maxrss: 1676
关于bash - 相当于 `getrusage()` 的命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304486/