【发布时间】:2020-04-17 14:00:45
【问题描述】:
这是一个简单的 bpftrace 脚本:
#!/usr/bin/env bpftrace
tracepoint:syscalls:sys_enter_kill
{
$tpid = args->pid;
printf("%d %d %d\n", $tpid, $tpid < 0, $tpid >= 0);
}
它跟踪 kill 系统调用,打印目标 PID 和两个附加值:是否为负,以及是否为非负。
这是我得到的输出:
# ./test.bt
Attaching 1 probe...
-1746 0 1
-2202 0 1
4160 0 1
4197 0 1
4197 0 1
-2202 0 1
-1746 0 1
奇怪的是,对于比较运算符来说,正负 pid 似乎都是正的。
出于理智,检查一下,如果我将赋值行替换为:
$tpid = -10;
我得到的正是我所期望的:
# ./test.bt
Attaching 1 probe...
-10 1 0
-10 1 0
-10 1 0
我做错了什么?
【问题讨论】:
-
你的
tpids 不是长整数吗?通过使用printf("%ld %d %d\n", $tpid, $tpid < 0, $tpid >= 0);打印,我得到了一致的结果。如果我输入kill -- -12345,我还可以在第三列中观察到1。 -
啊,对不起,他们不是。
-
你运行的是什么内核版本?
-
你能报告
grep " pid;" /sys/kernel/debug/tracing/events/syscalls/sys_enter_kill/format(以root身份运行)的输出吗? -
@pchaigno Linux 5.4.20。您询问的有关报告的命令
field:pid_t pid; offset:16; size:8; signed:0;。
标签: comparison trace pid ebpf