首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令行等效于“`getrusage()”

命令行等效于“`getrusage()”
EN

Stack Overflow用户
提问于 2014-06-19 10:33:37
回答 3查看 1.4K关注 0票数 4

我想跟踪磁盘io给定的命令可以这样做。getrusage()可以在C中使用;我可以在命令行中得到相同的内容吗?

timetimes显示用户和系统所花费的时间,后者包括自己的/子级故障,其他所有的位,如磁盘io、spwap、峰值内存如何?

举个例子:

代码语言:javascript
复制
[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
...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-23 12:54:29

理想情况下,像这样的东西应该内置到bash (或者您正在使用的任何shell )中。不幸的是,没有这样的东西AFAIK。

但是,使用getrusage()创建自己的包装非常简单:

代码语言:javascript
复制
#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);
}

汇编:

代码语言:javascript
复制
$ gcc -o process_io process_io.c

并使用它:

代码语言:javascript
复制
$ ./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
票数 5
EN

Stack Overflow用户

发布于 2014-06-23 12:59:08

按照chris‘s的回答,我在Python中有这样的回答:

代码语言:javascript
复制
#!/usr/bin/env python
import sys
import resource
import subprocess


bsel = resource.getrusage(resource.RUSAGE_SELF)
bchl = resource.getrusage(resource.RUSAGE_CHILDREN)
subprocess.Popen(sys.argv[1:]).communicate()
for i in range(10**7): pass  # test children/self independence
asel = resource.getrusage(resource.RUSAGE_SELF)
achl = resource.getrusage(resource.RUSAGE_CHILDREN)

print("""--child--
user\t%s
sys\t%s
mem\t%s
inb\t%s
oub\t%s
maj\t%s
nivcsw\t%s""" % (achl.ru_utime - bchl.ru_utime,
                 achl.ru_stime - bchl.ru_stime,
                 achl.ru_maxrss,
                 achl.ru_inblock - bchl.ru_inblock,
                 achl.ru_oublock - bchl.ru_oublock,
                 achl.ru_majflt - bchl.ru_majflt,
                 achl.ru_nivcsw - bchl.ru_nivcsw))

print("""--self--
user\t%s
sys\t%s
mem\t%s
inb\t%s
oub\t%s
maj\t%s
nivcsw\t%s""" % (asel.ru_utime - bsel.ru_utime,
                 asel.ru_stime - bsel.ru_stime,
                 asel.ru_maxrss,
                 asel.ru_inblock - bsel.ru_inblock,
                 asel.ru_oublock - bsel.ru_oublock,
                 asel.ru_majflt - bsel.ru_majflt,
                 asel.ru_nivcsw - bsel.ru_nivcsw))

它似乎奏效了:)

我仍在寻找自我与子女和孙辈之间的关系。欢迎新的答案:)

票数 1
EN

Stack Overflow用户

发布于 2014-06-23 12:38:03

iostat显示系统写入/读取光盘。遗憾的是,这不是一个特定的过程,而是整个系统,但是如果您是在您的开发机器上,我想这可能是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24304486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档