2011-01-04 2 views

답변

1

프로세스 식별자는 다른 시스템에서 고유하지 않습니다. 그것들은 나중의 프로세스를 위해 같은 머신에서 재사용 될 수 있으며 일반적으로 같은 실행 파일을 두 번 호출 할 때 동일하지는 않습니다.

생성 방법에 신경 쓰지 않아도됩니다. 프로세스 식별자가 단일 실행 프로세스를 고유하게 식별한다는 것만 확인할 수 있습니다. 즉, 프로세스 식별자가 단일 실행 프로세스를 고유하게 식별한다는 것입니다. 한 번.

+0

글쎄, 그것이 무엇을 기반으로 만들어 졌는지 아십니까? –

+1

아니요, 문서화되어 있지 않으며 Windows 버전이나 서비스 팩 또는 업데이트간에 또는 시간이나 달의 위상에 따라 변경 될 수 있습니다. :) – villintehaspam

+0

그것은 매우 유익했다, 특별히 "달의 위상"섹션 : –

3

PID 생성은 주로 Microsoft에서 공식적으로 문서화하지 않는 비밀입니다. PID 생성은 문서화 된 후에 구현에 집중해야하기 때문에 대부분 비밀입니다. 그러나 항상 4의 배수입니다. 그러나 이것은 당신이 의지해야하는 행동이 아닙니다. 그들은 고유하지 않으며 재사용 할 수 있습니다.

레이몬드 첸 (Raymond Chen)은 그의 blog에서 이것을 언급합니다.

+0

이들은 부작용 때문에 단지 4의 배수입니다. 이것은 의도적 인 것이 아니며 이론적으로 변경 될 수 있습니다. – Joe

+0

예 - 정확하게 레이먼드가 그의 블로그에서 지적한 것입니다. 내가 명확하게 대답을 업데이 트됩니다. – vcsjones

1

프로세스, 스레드 및 커널 핸들 ID는 공통 루틴에서 가져옵니다. 기술적으로 이것은 DWORD입니다. 내가 65,536 이상을 마지막으로 본 것을 기억하지 못합니다. 그것들은 재사용 될 수 있으며, 카운터 기반 메커니즘 일뿐입니다.

+0

Windows *에서 한 번 6 자리 PID와 같은 프로세스를 * 본 적이 있습니다. 하지만 그건 드문 일입니다. –

0

프로세스는 커널에서 객체로 유지되며, 따라서 HANDLE을 통해 시스템의 다른 모든 객체 (즉, 이벤트, 뮤텍스, 세마포어, 타이머 등)와 동일한 방식으로 사용자 모드로 내보내집니다.

따라서 프로세스 ID는 실제로 글로벌 핸들 테이블 (구현 세부 사항으로 PspCidTable)에서 관리되는 개체를 처리하는 데 단지 도움이됩니다. 흥미로운 점은 스레드도 객체로 유지되며이 테이블에도 삽입된다는 것입니다. 스레드 ID는 실제로 스레드 객체에 대한 처리입니다.

-scott

관련 문제