一、ID
task_struct结构体里面设计task id的有三个字段:
pid_t pid;
pid_t tgid;
struct task_struct *group_leader;
源码地址:https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h#L804

其中pid_t就是一个int:


1. PID
PID就是process ID。任何一个、不管是进程还是线程(Linux线程也是用的task_struct结构),其PID就是自己的进程ID。一个进程,如果只有主线程,那么PID是自己,TGID是自己等于PID,*group_leader指向自己。
2. TGID
TGID就是thread group ID。如果一个进程创建了其他线程,那么被创建的线程有自己的PID,该线程的TGID就是主线程的PID,*group_leader指向主线程。getpid()系统调用,返回的是tgid而不是PID,所以在多线程应用中,所有线程都有相同的PID。

3. *group_leader
指向进程中主线程的指针。
二、pid_max

在32bit系统上,PID的最大值是32767;在64bit系统上,PID的最大值是4194303。要关注的有三个点:
- /proc/sys/kernel/pid_max
- the value in this file also acts as a system-wide limit on the total number of processes and threads.
- /proc/sys/kernel/threads-max
- This file specifies the

这篇博客深入探讨了Linux系统中的PID、TGID和group_leader的概念。PID是进程ID,TGID是线程组ID,而group_leader则指向进程的主线程。在多线程环境中,所有线程共享同一PID,即TGID。文章还讨论了pid_max和threads-max的区别,前者限制进程ID的最大值,后者则从资源角度限制任务创建。此外,补充内容阐述了进程与线程创建的区别,并分析了系统限制进程创建的因素。
最低0.47元/天 解锁文章
1610

被折叠的 条评论
为什么被折叠?



