linux系統pid的最大值研究


內核源碼探查

通過對linux內核源碼的追蹤,可以看到對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))
                             

從代碼可知, 如果編譯內核時設置了CONFIG_BASE_SMALL選項,則默認的pid的最大值是0x1000,即4096個,否則默認的最大值是0x8000,即32768個。默認的最大值是可以修改的,但是可以修改的最大值是多少,這個是通過PID_MAX_LIMIT 限定的,從代碼可知,如果編譯內核時設置了CONFIG_BASE_SMALL選項,則最大值就是 8 * PAGE_SIZE個大小,否則就看是不是long的大小,如果大於4,也就是最大可以設置4 * 1024 * 1024個,也即是4194304個,否則最大只能設置PID_MAX_DEFAULT個了。

實驗驗證

本實驗是在centos7.5的64位桌面系統下完成的。long數據類型是大於4字節的。

用戶可以同過/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並不是系統默認的大小。

  • 設置 4 * 1024 * 1024,也即4194304

可以看出是可以設置成功的。

  • 設置 4 * 1024 * 1024 + 1,也即4194305

可見設置失敗,說明該系統支持的最大pid是4194304個,是和代碼分析匹配的。

結論

linux操作系統支持的最大的pid范圍是0-4194304個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM