/ usr / bin / time总是为平均常驻集大小赋予0

时间:2014-01-15 12:55:21

标签: linux

我正在尝试使用/ usr / bin / time来收集程序的平均驻留集大小。我尝试了几个程序的这个命令,但平均常驻设置大小始终为零。例如:

/usr/bin/time result

我的操作系统是ubuntu 10.04。

您能否告诉我是什么原因或如何解决?非常感谢你!

1 个答案:

答案 0 :(得分:4)

看,/usr/bin/time不会自己计算这些数据。它使用wait4从Linux获取此数据。这是wait4:

的描述
>man wait4

       pid_t wait4(pid_t pid, int *status, int options,
                   struct rusage *rusage);

问题是并非struct ruusage中的所有字段都得到维护:

   Not all fields are completed; unmaintained fields are set to zero by
   the kernel.  (The unmaintained fields are provided for compatibility
   with other systems, and because they may one day be supported on
   Linux.)  The fields are interpreted as follows:

虽然maxrss是关于rss的其他领域没有。所以它只返回0并且/ usr / bin / time也打印0。

此外,如果您查看GNU时间的源文件,您将看到以下代码:

/*
FMT is the format string, interpreted as described above.
*/
static void
summarize (fp, fmt, command, resp)
     FILE *fp;
     const char *fmt;
     const char **command;
     RESUSE *resp;
{

  while (*fmt)
    {
      switch (*fmt)
    {

        case 'M':       /* Maximum resident set size.  */
          fprintf (fp, "%lu", ptok ((UL) resp->ru.ru_maxrss));
          break;

        case 't':       /* Average resident set size.  */
          fprintf (fp, "%lu",
               MSEC_TO_TICKS (v) == 0 ? 0 :
               ptok ((UL) resp->ru.ru_idrss) / MSEC_TO_TICKS (v));

由于Linux将ru_idrss返回为0,因此平均常驻集大小为0。

有用的链接: