3

我正在尝试使用 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

我不明白为什么pideBPF 程序中的参数值与 urserland 进程给出的值不同

4

0 回答 0