Linux에서 프로세스 식별자의 의미가 무엇인지 알고 싶습니다. 프로세스의 순서입니까?
프로세스의 성격을 식별하는 코드인가요, 아니면 프로세스를 고유하게 식별하는 무작위로 생성된 숫자인가요?
유사한 PID를 가진 서로 다른 프로세스가 어떤 방식으로 관련되어 있습니까?
답변1
Linux 커널은 새 프로세스를 시작할 때 1부터 시작하는 고유한 정수를 할당합니다. 이는 /sbin/init
일반적 PID 1
으로 처음으로 시작된 프로세스이기 때문에 이를 확인할 수 있습니다 .
유사한 PID를 가진 서로 다른 프로세스가 어떤 방식으로 관련되어 있습니까?
습관. PID가 가까우면 아마도 같은 시간에 시작될 것입니다. 32비트 Linux에서는 PID가 32768로 제한되므로 커널이 이 숫자에 도달하면 다시 부팅됩니다. 64비트 Linux에서 PID 제한은 2^22이며 오버플로는 거의 발생하지 않습니다(가동 시간이 길고 수천 개의 프로세스를 시작 및 중지하지 않는 한).
답변2
PID는 "프로세스 식별자"의 약어입니다. 이것이 바로 시스템의 프로세스를 "고유하게" 식별하는 방법입니다. 여기서는 "고유"를 따옴표로 묶었습니다. 이는 PID가 할당된 프로세스의 수명 동안에만 고유하기 때문입니다.
PID를 선택하는 방법은 시스템마다 다릅니다. 원래 접근 방식은 최대값에 도달할 때까지 사용되지 않은 다음 숫자를 할당하는 것입니다. 최대값에 도달하면 이전에 사용되었지만 현재 사용되지 않은 숫자를 재사용하기 시작하고 가장 낮은 숫자부터 다시 시작합니다.
Linux는 간단하고 빠르기 때문에 이러한 원시적 접근 방식을 채택합니다. 단점은 잘못 작성된 일부 소프트웨어가 내부 난수 생성기를 시드하거나 임시 파일 이름을 생성하는 데 PID를 사용하는 등의 방식으로 PID에 의존할 수 있다는 것입니다. 이러한 소프트웨어를 사용하는 경우(다행히 그러한 소프트웨어는 점점 더 적습니다) ).
일부 시스템(예: OpenBSD)은 1과 최대값 사이에서 현재 사용되지 않는 값에서 PID를 무작위로 선택합니다. 이렇게 하면 로컬 보안 문제가 제거되지만 그 대신 새로운 프로세스 생성 속도가 느려지고 인터넷의 임의 사용자에게 잠재적으로 불쾌한 일(예: 다음에 설명된 취약점)이 발생할 수 있습니다.이 보안 스택 교환 질문), PID가 빠르게 재사용되지 않을 것으로 예상하는 소프트웨어가 중단될 수 있습니다.
FreeBSD와 같은 다른 솔루션에서는 접근 방식을 선택하거나 중간 지점을 사용할 수 있습니다. 이를 통해 처리할 특정 보안 문제 세트를 선택하거나(힌트, 이는 원격 문제가 아닌 로컬 문제일 수 있음) 중간 지점을 선택할 수도 있습니다(종종 올바른 선택임).