bcc之hello world
Hello World
2023-09-27 14:29:04 时间
bcc代码——Hello,world
1、简单监控clone()系统调用,将相关的信息打印出来
#!/usr/bin/python
from bcc import BPF
BPF(text="""
int kprobe__sys_clone(void *ctx){
bpf_trace_printk("hello,world!\\n");
return 0;
}
""").trace_print()
test="…"包含的是C语言编写的BPF程序
kprobe__sys_clone()对应内核kprobes的动态跟踪,也就是sys_clone()接口;
void *ctx这里没有用到参数,直接设置为void *类型
bpf_trace_printk()是一个通用的打印函数,会输出到trace_pipe中(/sys/kernel/debug/tracing/trace_pipe文件)然后trace_print()会读取上面的输出
2、格式化输出监控信息
#!/usr/bin/python
from bcc import BPF
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 and format output
print("%-18s %-16s %-6s %s" %("TIME(s)","COMM","PID","MESSAG"))
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))
采用hello()作为通用函数,而非使用kprobe__的前缀,接着,调用attach_kprobe()将hello()函数添加到系统调用clone()处
从全局共享文件/sys/kernel/debug/tracing/trace_pi/pe中读取一行并返回域。
相关文章
- Hello, gSoap: 用 gSoap 创建自己的第一个 Web Services 程序。
- GStreamer官方入门课程1:Hello World!
- springcloud-4:服务注册(hello-service)
- Hello World程序的起源与历史
- Batch入门教程丨第一章:部署与Hello World!(下)
- golang hello,world
- docker(二)不管怎么样,先跑起来。运行一个samba,运行一个hello world。
- Struts2 源码分析-----Hello world
- Maven 插件开发第一个 Hello World程序
- SpringBoot入门系列:第一篇 Hello World
- 0073-Go-hello world
- 物联网操作系统Hello China移植mile stone之一:移植基础版本V1.76发布
- ActiveReports 报表应用教程 (1)-Hello ActiveReports
- 01 Windows编程——Hello World
- Linux net core docker hello world 简单使用
- WTL Hello World
- Spring Boot入门===Hello World
- SpringBoot笔记——Hello World(狂神)
- Vuejs的hello案例
- ANTLR 宝藏入门之路 hello World初认识
- 通过几个Hello World感受.NET Core全新的开发体验
- 详解JAVA输出Hello World
- 1.QT-第一个程序 Hello QT , 以及QT creator介绍
- Hello Netgen
- C# 6.0 $"Hello {csdn}"
- C# 6.0 $"Hello {csdn}"
- 第一个C语言程序(从Hello World开始)
- Nginx学习之一-第一个程序Hello World