如何移除未使用BPF.detach_kprobe()的BCC附加eBPF程序?
移除未手动 detach 的 BCC 附加 eBPF kprobe 程序
以下是几种可行的清理方法:
方法一:通过 BCC 代码主动 detach
如果还能获取到对应 BPF 实例的引用,可以直接调用 detach_kprobe 移除探针:
from bcc import BPF b = BPF(src_file="udpsend.c", debug=0) # 移除指定事件的kprobe b.detach_kprobe(event="udp_sendmsg")
若不确定已附加的探针详情,可遍历当前实例的 kprobe 列表批量移除:
from bcc import BPF b = BPF(src_file="udpsend.c", debug=0) for kp in b.kprobes: b.detach_kprobe(event=kp.event)
方法二:用 bpftool 手动清理
如果已关闭原 Python 进程,可直接通过 bpftool 工具操作:
- 先定位目标 kprobe 类型的 eBPF 程序 ID:
从输出中找到关联bpftool prog show type kprobeudp_sendmsg的程序,可通过bpf_trace_printk的字符串内容区分两次加载的程序。 - 删除程序关联的链接或直接删除程序:
- 先查看程序关联的链接 ID:
bpftool link show prog <PROG_ID> - 删除链接:
bpftool link delete id <LINK_ID> - 或直接删除程序(内核会自动清理关联链接):
bpftool prog delete id <PROG_ID>
- 先查看程序关联的链接 ID:
方法三:终止对应 Python 进程
BCC 加载的 eBPF 程序,在其所属的 Python 进程退出时,内核会自动清理关联的 kprobe 链接与 eBPF 程序(除非程序被手动固定)。可通过以下命令定位并终止进程:
ps aux | grep python | grep udpsend kill <PID>
内容的提问来源于stack exchange,提问作者akastack
相关产品推荐
相关产品推荐

