运行GNU时间(/usr/bin/time
)并检查内存消耗时,它的输出是否说明目标程序的子进程的内存使用情况?
在GNU的时间手册中找不到任何内容。
答案 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
系统调用,它为等待的进程及其后代返回单独的信息。他们还清楚地证明wait3
和wait4
返回的骚乱还包括孙辈。