프로세스에 할당될 PID는 어떻게 결정됩니까?
ID에 사용되는 정수 값에는 상한선이 있는 것 같습니다. 이 한도는 무엇입니까? 어디에 정의되어 있나요?
사용자가 생성하지 않은 프로세스를 위해 예약된 범위가 있습니까?
분명히 말씀드리자면, 제가 이 질문을 하는 이유는 실제적인 이유라기보다는 호기심 때문입니다.
답변1
프로세스 ID의 최대값은 얼마입니까?최대값을 재정의합니다. 유지되는 프로세스( 0
그리고 1
주목할만한)가 있지만 많지는 않으며 커널에 다음 무료 정수(대부분의 유닉스) 또는 임의의 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;
}