当我们关闭 Linux 系统并重新启动系统时,它会对程序的进程使用之前使用的相同 PID 吗?或者这些 PID 只是随机生成的?如果系统用完了可用作 PID 的整数,会发生什么?
答案1
Linux 中的 PID 是按照从 0 到文件中包含的最大 PID 号的顺序生成的/proc/sys/kernel/pid_max
。从历史上看,最大 PID 是 32767,因为 Linux 中的页帧包含 32,768 位或 4KB,并且可以保存描述正在使用的 PID 的位向量。 PID 按顺序编号,按递增顺序分配,并在长期内重复使用。
PID 不会立即重用以防止竞争情况。例如,考虑一个进程向另一个进程发送信号的情况。然而,在接收到信号之前,接收者已经终止并且PID被重新分配给另一个新创建的进程。在这种情况下,信号被发送到错误的进程,因此 Linux 不会立即重用已终止进程的 PID。
当系统用完 PID(达到最大 PID)时,Linux 从一开始就重新使用未使用的 PID。