我需要在其生命周期内获得某个流程的统计信息(io,network)。无论如何在进程退出之前从/ proc获取这些信息? Linux内核API?
答案 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()
并收集统计信息。