gpt4 book ai didi

bash - 相当于 `getrusage()` 的命令行

转载 作者:行者123 更新时间:2023-11-29 09:43:44 26 4
gpt4 key购买 nike

我想跟踪给定命令 执行的磁盘 iogetrusage() 可以在C中使用;我能以某种方式在命令行中获得相同的结果吗?

timetimes 显示用户和系统花费的时间,后者包括自己/ 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com