🖥️ Linux 和 Windows 的 PID 是怎么分配的

B站影视 日本电影 2025-09-15 21:39 1

摘要:PID 范围默认:1 ~ 32767(32 位系统)更大范围:1 ~ 4194304(64 位系统,受 /proc/sys/kernel/pid_max 控制)PID 1 永远是 init/systemd分配方式内核维护一个递增计数器来分配新 PID。如果到达

在日常运维或开发中,我们经常会看到进程号(PID)。很多人会问:
Linux 和 Windows 下,PID 是如何分配的?什么时候会出现 PID 重复?

今天我们就来一次详细对比!

PID 范围默认:1 ~ 32767(32 位系统)更大范围:1 ~ 4194304(64 位系统,受 /proc/sys/kernel/pid_max 控制)PID 1 永远是 init/systemd分配方式内核维护一个 递增计数器 来分配新 PID。如果到达 pid_max,会回绕到较小值继续查找。遇到已被占用的 PID 就跳过。重复使用场景进程退出 → PID 空闲 → 新进程可能获得这个旧 PID。系统长时间运行,大量进程创建/销毁时必然会重复。当 PID 池接近满时,重复更快出现。

结论:Linux 上 只要旧进程退出,PID 就可能被复用,但不会出现两个进程同时拥有相同 PID。

PID 范围Windows 用 对象句柄表 管理进程,每个进程有唯一的 ProcessId。理论上 32 位整数范围,但受资源限制。分配方式内核对象管理器分配 PID,通常也是递增的。一般从 500+ 开始,而不是像 Linux 从 1 开始。重复使用场景进程结束 → 内核对象销毁 → 句柄释放 → 这个 PID 可能被重用。Windows 通常会延迟复用,以避免调试和 API 错误。

结论:Windows 也会复用 PID,但速度更慢。

$ echo $$ # 当前 shell 的 PID1234$ sleep 1000 & # 启动一个子进程[1] 1235$ kill 1235 # 杀掉它$ sleep 1000 & # 再启动一个[1] 1235 # PID 被复用Start-Process NotepadGet-Process -Name notepad | Select-Object IdStop-Process -Name notepadStart-Process notepadGet-Process -Name notepad | Select-Object Id

第二次启动 Notepad,有时会获得相同的 PID。

来源:linux运维菜

相关推荐