给定一个具有 pid 0 和 comm "swapper/0" 的任务实例,如何获取所有者 pid?
==编辑==
这使用 Netfilter 钩子发生。
在操作系统 Unix 中,除了进程 0(交换器)之外的每个进程都是在另一个进程执行 fork() 系统调用时创建的。调用fork的进程是父进程,新创建的进程是子进程。每个进程(进程 0 除外)都有一个父进程,但可以有许多子进程。
操作系统内核通过进程标识符来识别每个进程。进程0是系统启动时创建的特殊进程;在 fork 一个子进程(进程 1)之后,进程 0 成为交换进程(有时也称为“空闲任务”)。进程 1,称为 init,是系统中所有其他进程的祖先。
如果数据包是 UDP,netfilter 传出挂钩上下文中的current
任务将始终具有 TGID(用户空间中的 PID)。
对于 SYN TCP 数据包,current
任务将具有 TGID,但 ACK 数据包将没有它。要检索 TGID,您必须使用数据包长度从 SYN 数据包中计算套接字序列。