在运行GNU时间(/usr/bin/time
)并检查内存消耗时,它的输出是否考虑到我的目标程序的子进程的内存使用情况?
在GNU的时间手册中找不到任何内容。
最佳答案
是。
您可以轻松地通过以下方式进行检查:
$ /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
中返回的资源使用情况还包括等待的进程的后代。您可以在 wait4
中查看kernel/exit.c
的内核实现,以获取所有详细信息:$ 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
返回的骚扰还包括孙辈。