为了账号安全,请及时绑定邮箱和手机立即绑定

如果线程共享相同的PID,则如何识别它们?

如果线程共享相同的PID,则如何识别它们?

梵蒂冈之花 2019-11-05 15:25:20
我有一个与Linux中线程实现有关的查询。Linux没有显式线程支持。在用户空间中,我们可能使用线程库(例如NPTL)来创建线程。现在,如果我们使用NPTL,它支持1:1映射。内核将使用该clone()函数来实现线程。假设我创建了4个线程。那么就意味着:将会有4个task_struct。在内部task_struct,将根据克隆参数提供共享资源(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)。现在我有以下查询:4个线程是否具有相同的PID?如果有人可以详细说明,则如何共享PID。如何识别不同的线程;有一些TID(线程ID)概念吗?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

使用PID和TGID(线程组ID)标识线程。他们还知道哪个线程是谁的父级,从本质上讲,一个进程与它启动的任何线程共享其PID。线程ID的通常是由线程库本身(如并行线程,等...)进行管理。如果启动了4个线程,则它们应该具有相同的PID。内核本身将处理线程调度等,但是该库将用于管理线程(它们是否可以运行,取决于您对线程连接和等待方法的使用)。

注意:这来自我对内核2.6.36的回忆。我在当前内核版本中的工作在I / O层中,因此我不知道从那以后是否已更改。


查看完整回答
反对 回复 2019-11-05
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

Linux为fork()系统调用提供了复制进程的传统功能。Linux还提供了使用clone()系统调用创建线程的功能。但是,Linux不能区分进程和线程。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 635 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信