首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核如何知道哪些“线程”/processes与进程关联?

内核如何知道哪些“线程”/processes与进程关联?
EN

Unix & Linux用户
提问于 2018-05-06 19:38:13
回答 3查看 1.9K关注 0票数 1

正如我所读过的,Linux中的“线程”只是一个进程。

假设一个进程创建了两个“线程”,现在当进程终止时,与该进程相关联的两个“线程”/processes也将终止。

与进程(创建它们的进程)关联的“线程”/processes信息存储在哪里?

EN

回答 3

Unix & Linux用户

发布于 2018-05-06 22:02:45

信息存储在与每个进程/线程相关联的任务结构task_struct中的内存中。所有这些信息都可以在伪文件系统/proc中正常使用,如man 5 proc中所描述的那样。

当进程被终止并消失时,内核只是在内存中解析与进程关联的线程列表(在/proc/[pid]/task/中可以方便地看到)来杀死它们。

linux中的进程/线程表示模型在进程和线程之间没有很大的分离,它们都是任务。例如,它们共享相同的任务命名空间,如/proc/中所示,它们组织pid (进程id)或tid (线程id)相同。但是有一些不同,比如getpid()将返回线程的pid,而盖蒂()将返回线程的tid。当线程调用它们时,它们可以返回不同的值。

与问题相关的是那些映射到task_struct内容的伪文件:

  • /proc/[pid]/task/ --这是一个包含进程中每个线程的子目录的目录。每个子目录的名称是线程的数字线程ID (工贸署) (参见gettid(2))。在每个子目录中,都有一组文件的名称和内容与/proc/pid目录下的名称和内容相同。对于所有线程共享的属性,任务/工贸署子目录下的每个文件的内容将与父/proc/pid目录中相应文件中的内容相同(例如,在多线程进程中,所有任务/工贸署/cwd文件的值将与父目录中的/proc/pid/cwd文件相同,因为进程中的所有线程共享一个工作目录)。对于每个线程不同的属性,任务/工贸署下的相应文件可能具有不同的值(例如,每个任务/工贸署/status文件中的不同字段对于每个线程可能是不同的),或者它们可能根本不存在于/proc/pid中。在多线程进程中,如果主线程已经终止(通常通过调用pid(3)),则/proc//task目录的内容不可用。
  • /proc/[pid]/status Tgid:线程组ID (即进程ID)。这个伪文件有一个Tgid条目,对于进程的所有线程(也就是tid的pid)都是相同的值。

man 7 pthreads中可以看到更多的信息,并描述了当前的NPTL 实现

票数 3
EN

Unix & Linux用户

发布于 2018-05-06 19:57:37

除第一个线程(init)外,每个线程都有一个父线程。您可以看到最好的关系使用f标志到ps,这种方式:"ps“(没有引号)。

票数 -1
EN

Unix & Linux用户

发布于 2018-05-06 20:01:51

代码语言:javascript
复制
/bin/ps -eo pid,nlwp,tid,args -L
票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/442164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档