Linux pid与tgid概念
在Linux操作系统层面,线程其实只是特殊的进程,最特殊之处在于跟其他“线程进程“共享内存(包括代码段、数据段等,但不共享栈)。
这两天看书老是看到线程组(thread group),但是线程组是什么呢?百思不得其解,幸好有StackOverflow,不多说,先上链接:《If threads share the same PID, how can they be identified?》
讲一讲我的理解。
熟悉Linux下C编程的同学都知道,每个进程都有自己的pid,每个线程都有自己的线程id(pthread_t类型),但这是在用户空间的层面。而在内核层面中,线程其实也是进程。为了更好地区分这些概念,我们用任务/task来指代内核中的进程概念,而依旧用进程来指定用户空间层面的进程。所以当我说task的时候,指的是内核层面,而当我说进程的时候,指的就是用户空间层面的。
回到刚才说的地方,每个线程都是一个task,所以每个线程都有自己的一份struct task_sruct,而且每个线程都有自己独特的pid。那内核通过什么来知道这个线程属于哪个进程呢?答案是task_sruct.tgid。是的,一个进程就是一个线程组,所以每个进程的所有线程都有着相同的tgid。
当程序开始运行时,只有一个主线程,这个主线程的tgid就等于pid。而当其他线程被创建的时候,就继承了主线程的tgid。这样,内核就可以通过tgid知道某个task属于哪个线程组,也就知道属于哪个进程了。当我们用ps命令或者getpid()等接口查询进程id时,内核返回给我们的也正是这个tgid。
所以什么是线程组?其实就是进程。
好像讲得不是很好,大家还是看看StackOverflow大神的讲解吧:《If threads share the same PID, how can they be identified?》
https://my.oschina.net/u/3258476/blog/1518920
Linux pid与tgid概念的更多相关文章
- LINUX PID 1和SYSTEMD
LINUX PID 1和SYSTEMDhttp://coolshell.cn/articles/17998.html 要说清 Systemd,得先从 Linux 操作系统的启动说起.Linux 操作系 ...
- [转帖]LINUX PID 1 和 SYSTEMD
LINUX PID 1 和 SYSTEMD 2017年07月16日 陈皓 评论 46 条评论 57,176 人阅读 https://coolshell.cn/articles/17998.html ...
- Linux的几个概念,常用命令学习
Linux的几个概念,常用命令学习---------------------------------设备名装载点// 通过装载点访问设备-------------------------------- ...
- CentOS(五)--Linux系统的分区概念
一.系统分区 首先先普及一下有关系统分区的一些知识: 硬盘分区有三种,主磁盘分区.扩展磁盘分区.逻辑分区. 一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共不能超 ...
- Linux基础操作及概念
Linux基础操作及概念 终端的概念 通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示 ...
- linux 进程(一)---基本概念
一.进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. 二.进 ...
- linux进程管理之概念(一)
一.进程和线程的概念 1.进程和线程的定义 进程并不只是一段可以运行的代码,也包含了运行代码所需要的资源. 在操作系统来看,进程是资源管理的最小单元,而我们又知道,线程是程序执行的最小单元. 话说回来 ...
- LINUX PID 1和SYSTEMD 专题
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个 ...
- LINUX PID 1 和 SYSTEMD
要说清 Systemd,得先从Linux操作系统的启动说起.Linux 操作系统的启动首先从 BIOS 开始,然后由 Boot Loader 载入内核,并初始化内核.内核初始化的最后一步就是启动 in ...
随机推荐
- WordCountPro小程序
WordCountPro小程序 基本任务 1.githu地址 https://github.com/JarrySmith/WordCountPro 2.psp2.1表 PSP2.1 PSP阶段 预 ...
- java全栈day09----继承 抽象类
01继承的概述 在Java中,类的继承是指在一个现有类的基础上去构建一个新的类, 构建出来的新类被称作子类,现有类被称作父类在java中 继承如何来实用呢?举个例子 继承的定义格式和使用 *A:继承的 ...
- EIP-uni-app框架-建立项目
uni-app介绍 uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台.uni-app在跨端数量,扩展能力, ...
- 与HDFS交互- By java API编程
环境(ubuntu下) jdk eclipse jar(很烦,整了很久才清楚) - 导包方法 查看:https://www.cnblogs.com/floakss/p/9739030.html ()” ...
- 与HDFS交互-By shell命令
Shell命令的开头有三种: hadoop fs hadoop dfs hdfs dfs 关于具体命令之前写过 可查看:https://www.cnblogs.com/floakss/p/970344 ...
- swift 纯代码自定义控件
1.创建自定义控件 import UIKit class CustomView: UIView { var lab:UILabel! var btn:UIButton! /************ 将 ...
- POI2011 Tree Rotations
POI2011 Tree Rotations 给定一个n<=2e5个叶子的二叉树,可以交换每个点的左右子树.要求前序遍历叶子的逆序对最少. 由于对于当前结点x,交换左右子树,对于范围之外的逆序对 ...
- angular知识点总结
angularjs angular支持的运算 逻辑运算 比较运算 三目运算 调用字符串对象的成员方法 使用直接变量表示法创建对象 使用数组 (不可以)new var (不可以)调用全局es javas ...
- SharePoint安装注意点
在安装SharePoint之前需要注意的地方(整理如下:) 1.首先得先安装IIS服务器和ApplicationServer 2.然后要在运行setup.exe之前先运行prerequisiteins ...
- P2891 [USACO07OPEN]吃饭Dining 最大流
\(\color{#0066ff}{ 题目描述 }\) 有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类 ...