프로세스가 빈 프로세스 ID를 채우지 않는 이유

프로세스가 빈 프로세스 ID를 채우지 않는 이유

PID 번호 1이 시스템화(또는 이와 유사한 것)된다는 것은 누구나 알고 있습니다. 그 이후의 각 프로세스에는 또 다른 PID가 필요합니다.

그러나 50개의 프로세스(최대 PID 50)가 실행 중이고 PID 2가 있는 프로세스가 종료되고 새 프로세스가 시작되면 PID 2가 아닌 PID 51이 됩니다. 왜 이런거야?

예를 들어 파일 설명자의 경우에는 그렇지 않지만 파일 설명자 4를 닫고 새 파일 설명자를 열면 숫자 4가 표시됩니다.

답변1

대부분의 Unix 변형은 프로세스 ID를 순차적으로 할당합니다: 1, 2, 3, 4... 가능한 최대 PID 값에 도달하면 기존 PID를 건너뛰고 다시 1부터 시작합니다.

이는 의무가 아닙니다. 예를 들어, OpenBSD는 순차적이 아닌 무작위로 PID를 할당합니다. 이는 FreeBSD에서도 옵션입니다. 하지만 보안을 강화하는 것이 목표입니다.그 이점이 의심 스럽습니다..

이 동작에는 (모호한) 장점이 있습니다. 즉, 프로세스가 종료된 후 프로세스 ID가 즉시 재사용되는 경우가 거의 없습니다. 프로세스를 모니터링하고 프로세스가 종료된 후 PID가 더 이상 사용되지 않는다고 가정하는 프로그램이 많이 있습니다. PID가 새 프로세스에서 사용되면 중단됩니다. 이러한 프로그램에는 변명이 있습니다. 상위 프로세스 이외의 프로세스를 모니터링할 수 있는 좋은 API가 없습니다. 그러나 이러한 프로그램은 너무 일반적이어서 OpenBSD는 프로세스가 종료된 후 일정 기간(제 기억이 맞다면 몇 분 정도) PID 재사용을 방지합니다.

이 동작의 주된 이유는 이것이 전통적인 Unix 시스템에서 수행된 방식이고 이를 변경할 강력한 이유가 없었기 때문입니다. 파일 설명자의 경우 Unix는 역사적으로 첫 번째 사용 가능한 fd 번호를 사용했으며 이 동작은 공식 표준이 되었기 때문에 모든 Unix/POSIX 시스템에서는 이를 수행해야 합니다.

관련 정보