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分配给新进程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)