프로세스에 할당될 PID는 어떻게 결정됩니까?

프로세스에 할당될 PID는 어떻게 결정됩니까?

프로세스에 할당될 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;
}

관련 정보