Linux PID回收

82

Linux中是否有关于重新利用已使用PID的策略?我的意思是,如果一个PID已经被使用过,那么要多久后它才会被再次使用?


6
我也很好奇,只是想知道如果有新的进程取代了旧的进程,通过pid查找进程会如何工作。 - notbad.jpeg
2
在我看来,进程ID应该只用于标识当前正在运行的进程。如果你遵循这个策略,PID回收的确切方式永远不会影响你。依赖PID回收的方式是脆弱的。仅出于这个原因,你就不应该这样做。此外,我无法想象这种行为如何有用。你唯一想知道的是PID可以有多大。例如,这的一个结果是你的系统支持多少进程。请注意,不需要了解回收的工作原理就能得出这个结论。 - allyourcode
8
尝试编写一个像"top"这样的程序,而不用担心PID如何被回收。 - notbad.jpeg
为了给您一个现实生活中的例子,说明PID可能会重复出现的频率,我在高度使用的Ubuntu主机上看到大约每2小时一次,有时甚至更频繁。 - Phoebe
似乎对我来说,进程ID(PID)应该只用于标识当前正在运行的进程。如果你遵循这个原则,PID的回收方式将永远不会影响你。真的吗?如果我使用fork()创建一个子进程,得到一个pid_t返回值,然后做其他操作,再去检查子进程的状态,但与此同时子进程已经终止并且一个新的进程占用了它的PID,那该怎么办? - undefined
2个回答

69
随着新的进程分叉,PID将增加到系统相关的限制,然后再次循环。内核不会在此循环发生之前重用PID。
限制(最大PID数)为/proc/sys/kernel/pid_max。手册说:
“/proc/sys/kernel/pid_max”(自Linux 2.5.34起)
此文件指定PID绕组的值(即,此文件中的值比最大PID大1)。此文件的默认值32768导致与早期内核上相同范围的PID。

好的。所以这个增长策略是严格遵循的吗?还是在达到限制之前可以重复使用PID? - Cygnus
1
我认为在包装之前已经重复使用了一个pid,但是在执行ps -A -L -o lwp |sort -n命令后,我发现大约32372的pid仍在使用中;因此我的猜测是它在我的系统上非常快地循环,即使不太频繁,但至少在启动时会出现这种情况。 - Aquarius Power

10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接