我需要从内核中的“当前”task_struct
获取父线程名称。
task_struct
中的 comm
字段是给线程的名称。
我看到 task_struct
有 parent
、real_parent
和 group_leader
。
为其中任何一个访问 task_struct
中的 comm
字段不会给出父线程的名称(即克隆/vfork 的当前线程)。相反,我为父项获取 systemd。
我认为这是因为它与 init 命名空间有关。从“当前”线程获取父名称的正确方法是什么?
最佳答案
创建线程时(即使用 CLONE_THREAD
标志),从内核的角度来看,这意味着同一线程组中的任务,父线程不是创建它的线程,而是与线程组中所有其他线程相同的父线程。从用户空间的角度来看,进程中的所有线程共享同一个父进程,即进程的父进程。
.group_leader
是进程中的线程,它是当前线程组的领导者,它可能最接近您想要的(如果 comm
为 。 group_leader
是 systemd
那么这往往表明您正在查看 systemd 本身内的线程)。
关于c - 如何从Linux内核中的当前线程获取父线程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262758/