我正在尝试使用 libbpf 来跟踪对 kill 系统调用的调用。这是我的 eBPF 程序:
SEC("kprobe/__x64_sys_kill")
int BPF_KPROBE(__x64_sys_kill, pid_t pid, int sig)
{
bpf_printk("Pid = %i\n", pid);
return 0;
}
但是由于某种原因,当我尝试阅读pid
参数时,该值是负数。但是在kill
命令上使用 strace 时,pid 的值为正。
$ ping 8.8.8.8 > /dev/null &
[1] 87120
$ strace kill -9 $(pidof ping)
...
kill(87120, SIGKILL) = 0
...
[1]+ Killed ping 8.8.8.8 > /dev/null
日志:
bash-83960 [001] d... 42409.690336: bpf_trace_printk: Pid = -1060765864
我不明白为什么pid
eBPF 程序中的参数值与 urserland 进程给出的值不同