之前我读源码可能不仔细,“当时认为主机内核的pid-max是不需要修改的,因为已经是最大值了,这个值改大了也没有用,和主机的cpu物理核数有关,这个值是系统在开机的时候会帮我们设置成最大值。因为每核最大值是1024,比如我们32核的机器就是1024*32,也就是系统会设置成32768,40核机器就是40960,所以不需要修改,改小可以,改大改了也没有效果。”
但是,
刚仔细看了下代码,这个要看long字节大小 ,也就是操作系统版本,如果long是大于4字节的,就可以到2^22
/*
* This controls the default maximum pid allocated to a process
* 大致意思就是,如果在编译内核时指定或者为CONFIG_BASE_SMALl赋值了,那么默认值就是4096,反而就是32768
*/
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)
/*
* A maximum of 4 million PIDs should be enough for a while.
* [NOTE: PID/TIDs are limited to 2^30 ~= 1 billion, see FUTEX_TID_MASK.]
* 如果CONFIG_BASE_SMALL被赋值了,则最大值就是32768,如果条件不成立,则判断long的类型通常应该是操作系统版本,
* 如果大于4字节,取值范围大约就是4 million,精确计算就是4,194,304,如果条件还不成立则只能取值最被设置的PID_MAX_DEFAULT的值
*/
#define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
(sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))