linux - GNU 时间内存输出是否也考虑了子进程?
问题描述
在运行 GNU time ( /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 timewait4
在 Linux 上使用系统调用(通过wait3
glibc 包装器),虽然没有记录,但它返回的资源使用情况struct rusage
还包括等待的进程的后代。您可以查看 in 的内核实现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
还包括孙子孙女。
推荐阅读
- javascript - 当您无法直接访问服务器时如何监听服务器网页的更改(以修改它的工作)?
- java - 如何对大十进制执行加法?
- c++ - CUDA C++链接错误未定义参考threadIdx.x和blockDim.x
- c# - 如何使用组合框/下拉列表显示 DataGrid 属性,该组合框/下拉列表根据另一个文本框属性的输入而变化
- php - 使用 PHP Ajax 加载相同的行从数据库中加载更多搜索的行
- reactjs - 如何使全选复选框始终在 office-ui-fabric-react DetailsList 中可见
- java - Java for循环,从arraylist获取对象参数
- for-loop - 循环 kotlin 时不会更改数字结果
- javascript - AngularJS - 引用具有“。”的 $scope 名称/ng-model 在里面
- mysql - 无法使用 window_functions 在 MySQL 中验证查询输出