linux系統(tǒng)pid的最大值研究
內(nèi)核源碼探查
通過對linux內(nèi)核源碼的追蹤,可以看到對pid最大值的限定最終集中到include/linux/threads.h文件中的PID_MAX_DEFAULT上了,代碼如下:
/*
* This controls the default maximum pid allocated to a process
*/
#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^29 ~= 500+ million, see futex.h.]
*/
#define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
(sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))
從代碼可知, 如果編譯內(nèi)核時設置了CONFIG_BASE_SMALL選項,則默認的pid的最大值是0x1000,即4096個,否則默認的最大值是0x8000,即32768個。默認的最大值是可以修改的,但是可以修改的最大值是多少,這個是通過PID_MAX_LIMIT 限定的,從代碼可知,如果編譯內(nèi)核時設置了CONFIG_BASE_SMALL選項,則最大值就是 8 * PAGE_SIZE個大小,否則就看是不是long的大小,如果大于4,也就是最大可以設置4 * 1024 * 1024個,也即是4194304個,否則最大只能設置PID_MAX_DEFAULT個了。
實驗驗證
本實驗是在centos7.5的64位桌面系統(tǒng)下完成的。long數(shù)據(jù)類型是大于4字節(jié)的。
用戶可以同過/proc/sys/kernel/pid_max文件接口修改pid的最大值。
- 首先查看CONFIG_BASE_SMALL是否設置,打開
vi /boot/config-3.10.0-862.el7.x86_64查看使用的配置。

可以看到CONFIG_BASE_SMALL是未設置的。
- 查看當前的pid_max是多大

可以看到我的pid_max值是131072,是大于32768,說明pid_max并不是系統(tǒng)默認的大小。
- 設置 4 * 1024 * 1024,也即4194304

可以看出是可以設置成功的。
- 設置 4 * 1024 * 1024 + 1,也即4194305

可見設置失敗,說明該系統(tǒng)支持的最大pid是4194304個,是和代碼分析匹配的。
結論
linux操作系統(tǒng)支持的最大的pid范圍是0-4194304個。

浙公網(wǎng)安備 33010602011771號