BCC实现进程追踪

BCC的使用

对于BCC tools的使用我们工具包中的各种已经定义好的代码包(或者说是C语言的函数集合),来完成一些我们平常难以实现的操作,比如网络流量监控,进程监控。(本文特指在Linux系统)

  • 我们可以利用python代码与c语言的结合使用来实现tools的调用

  • 定义kprobes进行内核的跟踪,定义clone函数打印信息

  • 最后完成打印

  • 完成效果

  • 代码如下

from bcc import BPF

# define BPF program
prog = """
int hello(void *ctx) {
    bpf_trace_printk("Hello, World!\\n");
    return 0;
}
"""

# load BPF program
b = BPF(text=prog)
b.attach_kprobe(event=b.get_syscall_fnname("clone"), fn_name="hello")

# header
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "MESSAGE"))

# format output
while 1:
    try:
        (task, pid, cpu, flags, ts, msg) = b.trace_fields()
    except ValueError:
        continue
    print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))

posted @ 2021-01-04 22:41  Emuaer  阅读(263)  评论(0编辑  收藏  举报