什么决定了进程将被分配的 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;
}