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 ...
随机推荐
- maven tomcat:run指定tomcat7:
配置好下面的内容后,执行 run as -> tomcat7:run 或者tomcat6:run可以将maven的web应用在tomcat6/7里面运行 ,eclipse Indigo 版本默认 ...
- [转]CMD命令提示符窗口中的快捷键、小技巧和常用命令
转至:https://wenku.baidu.com/view/d5d2b7ca360cba1aa811dac6.html 快捷键: F1:按F1一次,命令提示符向后切换到已经执行过的命令字符.如果 ...
- 【Arcgis android】 离线编辑实现及一些代码段
Arcgis android 离线编辑实现及一些代码段 底图添加 private String path="file:///mnt/sdcard/data/chinasimple.tpk&q ...
- msbuild 中文说明文档
Microsoft (R) 生成引擎版本 14.0.25420.1 版权所有(C) Microsoft Corporation.保留所有权利. 语法: MSBuild.exe [选项] [项目文件] ...
- 通过pip3安装virtualenvwrapper
pip3 install virtualenvwrapper 配置virtualenvwrapper创建虚拟环境的目录和指定python3版本 环境编辑当前用户配置变量 mkdir ~/.virtua ...
- duddo在xml里面出现红叉的解决方法
原因是没有加入dubbo.xsd window-Preferences-输入xml-xmltacalog....... 配置离线约束:http://code.alibabatech.com/schem ...
- Java与C++比较
本文仅从片面的角度比较Java与C++的一些特性,如有错误的地方,请指正. 语言特性上的一些差异: 1.Java没有无符号整数,C++/C#都有. 2.Java中不存在指针.Java的引用是功能弱化的 ...
- webpack4 入门(一)
一.简介 WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,less, TypeScript等),并 ...
- ObjectARXWizards & AutoCAD .NET Wizards 下载地址
Autodesk Developer Network ObjectARX Wizards The ObjectARX Wizards for AutoCAD 2016 for Visual Stud ...
- Chrome插件-Postman Interceptor
postman有一个chrome插件 Postman Interceptor,可以让postman中发送请求的时候使用这个网站的浏览器cookie Postman Interceptor,可以让pos ...