【问题标题】:Measuring process statistics in Linux在 Linux 中测量进程统计信息
【发布时间】:2011-01-23 03:25:06
【问题描述】:

我正在构建编程竞赛软件。一个用户的程序被我们的评审系统接收,并通过编译它并通过 fork() 和 exec() 运行它来评估它。父进程等待子进程(提交的进程)退出,然后将其清理干净。

为了提供有关程序运行的有用信息,我想测量程序使用的 CPU 时间和峰值内存。 Linux 内核是否跟踪这些值?有没有其他方法可以获取这些信息?

【问题讨论】:

  • 小心这样做,流氓用户可能会在他们的程序中放入令人讨厌的惊喜。
  • 我们使用 setrlimit 系统调用限制最大 CPU 时间、打开文件等,所以我认为用户不会有任何令人讨厌的惊喜 :)

标签: c linux statistics operating-system linux-kernel


【解决方案1】:

如果你调用wait4()系统调用在子进程完成时获取子进程,它会用子进程的资源使用填充一个struct rusage结构(ru_utimeru_stime持有用户和系统CPU孩子分别使用的时间)。

【讨论】:

    【解决方案2】:

    您可以使用getrusage()acct() (more info here) 系统调用

    【讨论】:

      【解决方案3】:

      我猜,time(1) 程序可能会有所帮助。它比轮询顶部简单得多。

      手册页摘录:

         Disregarding  the
         name  of  the  utility, GNU makes it output lots of useful information,
         not only about time used, but also on other resources like memory,  I/O
         and  IPC calls (where available).
      

      【讨论】:

        【解决方案4】:

        您可以检查顶部命令。这可能会有所帮助。

        【讨论】:

        • 如果对否决票进行解释会更好吗?我知道人们已经为这个问题发布了更好的答案,但是,我不认为这个答案是完全不相关或错误的。如果我错了,请纠正我。
        • 听起来解决方案是自动化的。 top 是一个最终用户程序,不适合自动化。
        【解决方案5】:

        一个低技术(但简单)的解决方案是定期以批处理模式转储top 的输出,然后对其进行解析。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-30
          • 2014-10-27
          • 1970-01-01
          • 1970-01-01
          • 2010-11-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多