下面这个函数实现的功能是:当用户在调用sys_clone 时,会打印调用的时间,comm,pid,message
具体的输出如下:
TIME(s) COMM PID MESSAGE
24585001.174885999 sshd 1432 Hello, World!
24585001.195710000 sshd 15780 Hello, World!
from bcc import BPF
# define BPF program
#定义一个c 函数,当需要监控的函数被调用时,会触发这个函数的调用. 这个函数被定义在一个字符串中
prog = """
#形参是void
int hello(void *ctx) {
#通过bpf_trace_printk来打印log。
bpf_trace_printk("Hello, World!\\n");
#这个函数要返回0 ,否则会触发一个bug
return 0;
}
"""
# load BPF program
#通过BPF 来讲前面定义的hello 函数装载并编译
b = BPF(text=prog)
#设置出发点,从这里可以看到当调用sys_clone的时候,会调用fn_name 这个函数,也就是hello 这个函数。
b.attach_kprobe(event="sys_clone", fn_name="hello")
# header
#通过python 输出一行log
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "MESSAGE"))
# format output
#死循环
while 1:
try:
#类似前面的额trace_print,得到要输出的内容
(task, pid, cpu, flags, ts, msg) = b.trace_fields()
except ValueError:
continue
#在python 中输出要打印的内容
print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
#
Lesson 2. hello_fields.py
最新推荐文章于 2023-05-22 18:20:48 发布