【随笔】Linux PID

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

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值