在进程退出之前从/ proc提取进程的所有统计信息(Linux)

时间:2016-01-13 10:18:12

标签: linux kernel proc

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

1 个答案:

答案 0 :(得分:3)

wait4()struct rusage

进程终止后收集一些统计信息的一种简单方法是wait4(2)系统调用,它可以填充rusage结构。

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()并收集统计信息。