GNU时间存储器输出是否也考虑了子进程?

时间:2019-05-02 15:05:46

标签: linux time gnu

运行GNU时间(/usr/bin/time)并检查内存消耗时,它的输出是否说明目标程序的子进程的内存使用情况?

在GNU的时间手册中找不到任何内容。

1 个答案:

答案 0 :(得分:2)

是的

您可以轻松地通过以下方式进行检查:

$ /usr/bin/time -f '%M' sh -c 'perl -e "\$y=q{x}x(2*1024*1024)" & wait'
8132
$ /usr/bin/time -f '%M' sh -c 'perl -e "\$y=q{x}x(8*1024*1024)" & wait'
20648

GNU时间正在Linux上使用wait4系统调用(通过wait3 glibc包装器),并且尽管未记录,但它在struct rusage中返回的资源使用量也包括等待的过程。您可以在kernel/exit.c中查看wait4的内核实现,以获取所有详细信息:

$ grep -C2 RUSAGE_BOTH include/uapi/linux/resource.h
#define RUSAGE_SELF     0
#define RUSAGE_CHILDREN (-1)
#define RUSAGE_BOTH     (-2)            /* sys_wait4() uses this */
#define RUSAGE_THREAD   1               /* only the calling thread */

FreeBSD和NetBSD也有一个wait6系统调用,它为等待的进程及其后代返回单独的信息。他们还清楚地证明wait3wait4返回的骚乱还包括孙辈。