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

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

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

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

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

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

答案1

进程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;
}

相关内容