为什么PID值不连续?

Vas*_*arg 14 command-line ps

如果我们输入,ps -ef我们会得到一个进程列表。为什么PID号不连续?

Rin*_*ind 16

在 Ubuntu 上,它们是连续的。在其他操作系统上,它可能会有所不同。

内核在 (RESERVED_PIDS, PID_MAX_DEFAULT) 范围内分配 PID。它在每个命名空间中按顺序执行(不同命名空间中的任务可以具有相同的 ID)。如果范围用尽,pid 分配会环绕。

/sf/ask/241270921/

虽然介意...

  • 内核调度可以派生一个进程,因此它可能看起来跳过数字。
  • 当该任务结束时,PID 将消失。
  • 在达到 PID_MAX_DEFAULT 之前,不会重新使用 PID。
  • 跳过保留 PID。

关于stackoverflow的一些主题:

在注释中是一个测试 PID 分配的命令:

for i in {1..20}; do sh -c 'echo $$'; done
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 9

中间缺少的进程 ID 已经失效,它们的 PID 将在后面的进程中被内核重用。

死进程不会显示在进程表中(僵尸除外),因此ps -ef不会显示它们。