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

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

wait4()struct rusage

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


ptrace()

如果还不够,可以使用ptrace(2)来终止一个进程,

PTRACE_O_TRACEEXIT (自Linux 2.5.60开始)

在出口停止tracee。 waitpid(2)由跟踪器返回一个状态值

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

Tracee的退出状态可以通过PTRACE_GETEVENTMSG进行检索。

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

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


KProbes

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