找出一个进程在其自身上花费了多少时间

找出一个进程在其自身上花费了多少时间

time命令可用于获取给定作业的 CPU 时间估计值。然而,它的输出似乎包括子进程所花费的时间。有没有办法只获取在父进程中花费的时间。

答案1

得到鲁萨奇(2)优惠RUSAGE_SELFRUSAGE_CHILDREN;调用 shell 只能使用RUSAGE_CHILDREN包含您的进程以及该进程的子进程的进程。因此,正如 Stéphane Chazelas 指出的你的流程需要调用getrusage(RUSAGE_SELF, &usage) 从自身内部,如果您的流程无法编辑,则必须通过某种LD_PRELOAD技巧来实现。

另一种选择是使用 DTrace 或此处的 SystemTap 类型内核分析工具来报告进程退出时的使用情况;以下报告全部进程退出值:

probe kprocess.exit {
    printf("%s[%d]: %s\n  %s\n  %s\n\n",
      execname(), pid(), cmdline_str(),
      task_time_string(),
      proc_mem_string()
    );
}

我们还可以使用适当的代码分析特定的 PID 或可执行文件名称,这里再次使用 SystemTap:

probe kprocess.exit {
    if (pid() != target()) next;
    printf("%s[%d]: %s\n", execname(), pid(), task_time_string());
}

尽管这可能需要额外的测试来确认当进程被信号等杀死时会发生什么。

相关内容