【问题标题】:Extract all statistic of a process from /proc just before the process exit (Linux)在进程退出之前从 /proc 中提取进程的所有统计信息(Linux)
【发布时间】:2016-01-13 10:18:11
【问题描述】:

我需要在其生命周期内获取进程的一些统计信息(io、网络)。无论如何,在进程退出之前从 /proc 获取这些信息吗? Linux 内核 API ?

【问题讨论】:

  • 也许你可以使用 GNU 的时间函数 (/usr/bin/time),它可以输出大量的统计数据。您可以查看其源代码以了解其工作原理。

标签: linux kernel proc


【解决方案1】:

wait4()struct rusage

进程终止后收集一些统计信息的简单方法是wait4(2) syscall,它可以填充rusage struct。


ptrace()

如果还不够,您可以使用ptrace(2) 在进程终止前停止进程:

PTRACE_O_TRACEEXIT(自 Linux 2.5.60 起)

在退出时停止跟踪。追踪者的waitpid(2) 将返回一个状态值,使得

status>>8 == (SIGTRAP | (PTRACE_EVENT_EXIT<<8))

tracee的退出状态可以通过 PTRACE_GETEVENTMSG.

tracee 在进程退出期间提前停止,当 寄存器仍然可用,允许示踪剂 查看退出发生的位置,而正常退出 处理完成后通知完成 退出。即使上下文可用,跟踪器 此时无法阻止退出发生。

waitpid(2) 将报告进程将要终止并停止时,您可以从/proc 收集统计信息,但我没有尝试过。


KProbes

我知道的最通用的解决方案是KProbes 及其衍生产品。您或许可以使用 DTrace 或 SystemTap 来捕获 sys_exit() 并收集统计信息。

【讨论】:

  • 谢谢。但我不知道要退出的进程的pid。所以我想在他们退出时跟踪所有过程
  • @ChrisLiu,然后也许看看 KProbes。我认为他们可以满足您的需求。
  • 感谢您的解决方案。我正在查看 KProbes 并在 do_exit 上放置一个 Probe
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多