0
点赞
收藏
分享

微信扫一扫

PID、TGID、进程、线程组概念

在Linux操作系统层面,线程其实只是特殊的进程,最特殊之处在于跟其他“线程进程“共享内存(包括代码段、数据段等,但不共享栈)。每个线程都是一个task,所以每个线程都有自己的一份struct task_sruct,而且每个线程都有自己独特的pid。

内核通过什么来知道这个线程属于哪个进程呢?

答案是task_sruct.tgid,一个进程就是一个线程组,所以每个进程的所有线程都有着相同的tgid

PID、TGID、进程、线程组概念_PID

当程序开始运行时,只有一个主线程,这个主线程的tgid就等于pid。而当其他线程被创建的时候,就继承了主线程的tgid。这样,内核就可以通过tgid知道某个task属于哪个线程组,也就知道属于哪个进程了。此外,仅有主线程的 PID 值和 TGID 相同,子线程拥有各自的 PID,可以通过这点来判断是否是主线程。

所以什么是线程组?其实就是进程。

​​https://www.lxlinux.net/1424.html​​

fork() 和 new_thread() 区别:

| process |

_| pid=42 |_

_/ | tgid=42 | \_ (new thread) _

_ (fork) _/ +---------+ \

/ +---------+

+---------+ | process |

| process | | pid=44 |

| pid=43 | | tgid=42 |

| tgid=43 |


举报

相关推荐

0 条评论