Linux tracing/trace_pipe 文件不可读 (debugfs)
Linux tracing/trace_pipe file not readable (debugfs)
我有写入 trace_pipe 文件的 BPF 程序,即使程序正确执行,我也无法从该文件读取数据。
每当我尝试 cat /sys/kernel/debug/tracing/trace_pipe
时,进程都会卡住,并且没有任何输出显示。
我已经通过 运行 手动挂载了 debugfs:mount -t debugfs none /sys/kernel/debug
当我尝试 cat、tail、vi 或以某种方式读取此文件的内容时,结果是一样的。
“trace_pipe”文件甚至在我挂载 debugfs 后也是不可读的,所以我不认为这与我的 BPF 代码执行有关。
这个文件根本不可读,我想知道我应该怎么做才能阅读它。
我可以确认 debugfs 已正确挂载,并且文件确实存在:
感谢任何有关如何阅读此文件的提示。
所以这只是您的 eBPF 程序中的一个错误。来自你的 link:
int my_pid = 0;
SEC("tp/syscalls/sys_enter_write")
int handle_tp(void *ctx)
{
int pid = bpf_get_current_pid_tgid() >> 32;
if (pid != my_pid)
return 0;
bpf_printk("BPF triggered from PID %d.\n", pid);
return 0;
}
具有 if (pid != my_pid) return 0;
和 my_pid = 0
,意味着每次您收集的 PID 为非 0 时您都会退出 - 这几乎是 一直 .所以你的程序提前退出,你没有机会执行对 bpf_printk()
的调用并将数据发送到跟踪管道。
我有写入 trace_pipe 文件的 BPF 程序,即使程序正确执行,我也无法从该文件读取数据。
每当我尝试 cat /sys/kernel/debug/tracing/trace_pipe
时,进程都会卡住,并且没有任何输出显示。
我已经通过 运行 手动挂载了 debugfs:mount -t debugfs none /sys/kernel/debug
当我尝试 cat、tail、vi 或以某种方式读取此文件的内容时,结果是一样的。
“trace_pipe”文件甚至在我挂载 debugfs 后也是不可读的,所以我不认为这与我的 BPF 代码执行有关。
这个文件根本不可读,我想知道我应该怎么做才能阅读它。
我可以确认 debugfs 已正确挂载,并且文件确实存在:
感谢任何有关如何阅读此文件的提示。
所以这只是您的 eBPF 程序中的一个错误。来自你的 link:
int my_pid = 0;
SEC("tp/syscalls/sys_enter_write")
int handle_tp(void *ctx)
{
int pid = bpf_get_current_pid_tgid() >> 32;
if (pid != my_pid)
return 0;
bpf_printk("BPF triggered from PID %d.\n", pid);
return 0;
}
具有 if (pid != my_pid) return 0;
和 my_pid = 0
,意味着每次您收集的 PID 为非 0 时您都会退出 - 这几乎是 一直 .所以你的程序提前退出,你没有机会执行对 bpf_printk()
的调用并将数据发送到跟踪管道。