Временная память GNU также учитывает дочерние процессы? - PullRequest
0 голосов
/ 02 мая 2019

При запуске времени GNU (/usr/bin/time) и проверке использования памяти, учитывает ли его вывод использование памяти дочерними процессами моей целевой программы?

Не удалось найти что-либо на временной странице GNU.

1 Ответ

2 голосов
/ 03 мая 2019

Да.

Вы можете легко проверить с помощью:

$ /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 использует системный вызов wait4 в Linux (через оболочку 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 также входят внуки.

...