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

标签 bash command-line io

我想跟踪给定命令 执行的磁盘 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/

相关文章:

bash - 在 bash 中将 $1 与另一个字符串进行比较

从命令行使用 sql 身份验证的 sqlcmd

command-line - 使用 FFMPEG 剪切部分字幕文件

python open(file) 只读了大约 2507000 行?

linux - 如何在 linux 中 ping 直到知道主机超时 X 秒?

linux - ssh 中带有管道变量的 egrep 命令抛出 No Such File or Directory 错误

command-line - 如何触发GMS中默认浏览器打开html文件

c - 文件输入/输出 : two file pointes

c - 在另一个线程中写入文件是否安全?

regex - bash-delete 如果字符串存在于两个模式之间