描述:
如何获取 namespace 中的进程ID
minimal_ns 与 minimal 功能相同,但其适用于命名空间环境。
minimal 在存在命名空间的环境中(如容器或 WSL2)无法正常工作,原因是该环境下进程的 “感知 PID”(perceived pid)并非进程的 “实际 PID”(actual pid)。
代码梳理
The BPF side
SEC(“tp/syscalls/sys_enter_write”)
1 | SEC("tp/syscalls/sys_enter_write") |
bpf_get_ns_current_pid_tgid
1 | int my_pid = 0; |
The user-space side
/proc/self/ns/pid
1 | /* ensure BPF program only handles write() syscalls from our process */ |
stat("/proc/self/ns/pid", &sb) 用于获取当前进程所属的「PID 命名空间(PID Namespace)」的元数据,通过返回的 struct stat 结构体中的 st_ino(inode 号),识别当前进程的 PID 命名空间归属(判断两个进程是否在同一个 PID 命名空间)。