正如标题所示,当pid_max
达到 (32 位标准是 32768) 且出现许多僵尸进程时会发生什么?
在我们的服务器上,用户生成了许多suphp defunct zombie
进程,这迫使我们的服务器重新启动......我认为发生这种情况是因为pid_max
达到了......
我正在运行 CentOS 5.8 和 Apache 2.2.3
谢谢。谨致问候,约翰。
编辑 谢谢您的回答。
答案1
PID 是按顺序生成的,在分配给进程之前,会进行检查以确保进程当前没有特定的 PID。当达到 pid_max 时,计数器会简单地返回到开头。如果没有更多可用的 PID,则无法创建更多进程,您将收到错误消息“...没有更多进程”。
答案2
如果没有可用的 PID,则无法创建新进程。某些操作系统会为 root 用户保留一些 PID。
但是 PID 是可以重复使用的。因此,如果有可用的 PID,就会使用它。
答案3
Linux 编程接口涵盖了这一点,我将在这里引用它,因为它比公认的答案更具体一些。来自第 115 页。
在 32 位系统上,最大 PID 为 32767。每次达到限制时,内核都会重置其进程 ID 计数器,以便从低整数值开始分配进程 ID。
并且它将被重置为 300,而不是 1。这样做是因为许多低编号的进程 ID 被系统进程和守护进程永久使用,因此会浪费时间在这个范围内搜索未使用的进程 ID。
我不确定 64 位系统上的默认重置值是否仍为 300,也许 64 位内核中的系统进程数量只是增加了?