什么决定了进程将被分配的 PID?

chb*_*chb 8 process

什么决定了进程将被分配的 PID?

似乎用于 ID 的整数值有一个上限;这个限制是什么,它在哪里定义?

是否有为非用户创建的进程保留的范围?

需要明确的是,我问这个更多是出于好奇而不是任何实际原因。

thr*_*rig 13

进程 ID 的最大值是多少?覆盖最大值;有保留进程(0并且1值得注意)但不多,内核中有一些代码选择下一个空闲整数(大多数 unix)或随机 pid(OpenBSD,或某些 Linux)。OpenBSD 调用allocpid它可以在kern/kern_fork.c

/* Find an unused pid */
pid_t
allocpid(void)
{
        static pid_t lastpid;
        pid_t pid;

        if (!randompid) {
                /* only used early on for system processes */
                pid = ++lastpid;
        } else {
                /* Find an unused pid satisfying lastpid < pid <= PID_MAX */
                do {
                        pid = arc4random_uniform(PID_MAX - lastpid) + 1 +
                            lastpid;
                } while (ispidtaken(pid));
        }

        return pid;
}
Run Code Online (Sandbox Code Playgroud)