c - 如何从Linux内核中的当前线程获取父线程名称

标签 c linux-kernel namespaces

我需要从内核中的“当前”task_struct 获取父线程名称。 task_struct 中的 comm 字段是给线程的名称。

我看到 task_structparentreal_parentgroup_leader。 为其中任何一个访问 task_struct 中的 comm 字段不会给出父线程的名称(即克隆/vfork 的当前线程)。相反,我为父项获取 systemd

我认为这是因为它与 init 命名空间有关。从“当前”线程获取父名称的正确方法是什么?

最佳答案

创建线程时(即使用 CLONE_THREAD 标志),从内核的角度来看,这意味着同一线程组中的任务,父线程不是创建它的线程,而是与线程组中所有其他线程相同的父线程。从用户空间的角度来看,进程中的所有线程共享同一个父进程,即进程的父进程。

.group_leader 是进程中的线程,它是当前线程组的领导者,它可能最接近您想要的(如果 comm。 group_leadersystemd 那么这往往表明您正在查看 systemd 本身内的线程)。

关于c - 如何从Linux内核中的当前线程获取父线程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262758/

相关文章:

javascript - Socket.IO 命名空间,调用未定义的函数 .of()

C数组问题...(打印和定义)

c# - .net 中未使用的用途是否会影响性能?

将正斜杠转换为反斜杠

android - 奇怪的Makefile,需要说明

C-使用内核模块显示CPU信息

linux - 内核如何理解哪个驱动模块函数处理读/写/等?

c++ - MSXML DOM : Add namespace declaration to an existing node in a tree

c++ - memcmp 为相同(零值)位字段结构返回非零

c - 这里的输出应该是什么?