为什么32位系统的PID最大是32768

为什么32位系统的PID最大是32768,第1张

每个进程都有一个独一无二的结构体即struct

task_struct,一个进程相关的所有信息都可以在该结构体里标识,每一个进程的task_struct又组成了一个任务队列,用双向链表表示:另外每一个进程还对应一个独一无二的数字,即PID,PID最大值为32767(32768=8*4096,32位系统一个页是4096字节,每个字节为8bit),后一个进程创建的PID是前一个进程PID加1,当PID到达最大值后又从最小值开始,linux用pidmap_array位图来知道哪些pid被使用,一个进程中所有线程使用的PID是相同的,但是有各自不同的线程ID,线程ID只在该进程环境中有效,进程的PID在整个系统是唯一的,

你可能同时跑32768个进程么?这个值是可以改的,在/proc/sys/kernel/pid_max,用echo重新写入一个数值到这个文件即可。

设置最大值是32767的原因是为了与老版本的Unix和Linux兼容,32768是short int短整型的最大值,由于一般机器不可能同时跑那么多进程+线程,所以32768是肯定够用了,但是系统倾向于分配未使用过的pid给新进程,所以你会发现在正在运行的系统上,有很多低位的pid没有使用,那是因为启动的时候该pid被其它程序用过了,当然,你真有本事用到pid的最大值,系统也有办法解决,那就是从头(低位)搜索未被占用的pid分配给新进程。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7326428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存