一、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/k