Windows 7은 프로세스 ID를 재사용합니까?


19

Windows 7은 프로세스 ID를 재사용합니까?

내가이 질문을하는 이유는 Windows XP와 Linux가 20-30만을 초과하는 프로세스 ID를 생성하지 않는 경험이 있기 때문입니다. 그러나 Windows 7 시스템은 재부팅 후 몇 시간 내에 5-10K 정도의 ID에 도달합니다. 이는 과거의 일반적인 경험입니다. 다음날 아침 확인하고 일부 프로세스는 250k 이상입니다.

프로세스 생성 및 종료를 기록하기 위해 보안 감사 기능을 활성화했습니다. 수백 또는 수천의 프로세스 나 프로세스를 생성하는 것은 없습니다. 이러한 이벤트 중 513 개만 24 시간 동안 등록되었지만 수십만 개의 프로세스 ID가 사용 된 것으로 나타납니다.

내 질문에 대한 검색을 시도했는데 이전에 제안 된 질문 중 하나가 Mark Russinovich의 놀라운 블로그를 가리 켰습니다 . 그러나이 기사는 매우 흥미로운 독서이지만 나를 당혹스럽게했습니다.


2
나는 그들이 ... 재부팅 후 다시 내기
오스틴 T 프랑스어

3
물론 부팅을 시작할 때 프로세스가 없기 때문에 모든 PID> 4는 사용되지 않습니다.
grawity

1
그의 요점은 Windows가 PID를 결국 재사용하지 않으면 실행이 중단되고 재부팅이 필요하다는 것입니다.
Simon Richter

답변:


22

내 테스트에서 하나의 잘못된 가정이있는 것으로 보입니다 .PID 번호는 순차적으로 제공되지 않습니다. 이것은 증명하기가 매우 쉽습니다. 명령 행에서 다음 명령을 수행하십시오. 메모장을 3 부 열어야합니다.

notepad & notepad & notepad

내 컴퓨터에는 모두 동시에 열린 3 사본의 PID가 있습니다.

여기에 이미지 설명을 입력하십시오

PID가 많이 점프하는 것을 볼 수 있듯이 한 번에 하나씩 열면 다음 PID가 항상 이전 PID보다 크지 않다는 것을 알 수 있습니다. 예를 들어 메모장의 네 번째 사본을 열어서 이것을 얻었습니다.

여기에 이미지 설명을 입력하십시오

따라서 Windows 7은 프로세스를 시작할 때마다 사용하지 않는 임의의 PID를 선택하기 때문에 재부팅하지 않고도 Windows 실행 중에 PID를 재사용 할 수 있습니다.


나는 그것을 증명하기 위해 간단한 powershell 스크립트를 작성했다 (v2 이상이 필요하다.이 답변은 C # 버전의 편집 내역을 참조하십시오)

$h = new-object 'System.Collections.Generic.HashSet[string]'
do {
    $proc = Start-Process 'notepad' -PassThru
    $id = $proc.Id
    Stop-Process $id
} while ($h.Add($id))
$count = $h.Count
Write-Host "Took $count PIDs to hit a duplicate, the duplicate was $id."

프로그램 10 번을 실행하면 항상 사이했다 134147재사용 할 수있는 동일한 PID에 대한 메모장의 출시 (왜 작은? GO-GO 가제트 그래서이 숫자입니다 생일 문제 !)


5
Windows NT는 PID가 항상 4의 배수 이기 때문에 더욱 빨라 집니다.
grawity

고마워 스캇 모든 프로세스 PID 번호를 추적하고 할당 된 프로세스 이름으로 파일에 기록 할 수있는 쉘 스크립트 / 유틸리티가 있습니까?
isildur

1
당신은 할 수 있지만, 그것의 유용성을 보지 못했습니다. 시작된 모든 프로세스를 추적하고 싶습니까? 아니면 PID에 관심이 있습니까?
Scott Chamberlain

이 시점에서 프로세스 ID 번호를 500k + 범위로 푸시하기 위해 어떤 프로세스가 여러 번 실행되는지 알고 싶습니다. 아마도 프로세스는 프로세스를 생성하는 것입니다. 이것은 기본 승리 7 데스크톱, 바이러스 백신 및 파이어 폭스, 게임 또는 두 개이며 우리는 그 밖의 많은 것을하지 않습니다. 답장을 보내 주셔서 감사합니다.
isildur

그래서 몇 년 전에 누군가가 작성한 배치 파일을 사용하여 디스크 드라이브를 인덱싱하는 오래된 유틸리티를 제거했으며 이것이 높은 PID 번호를 생성하는 범인이었습니다. 이제 동일한 머신이 몇 주 동안 실행되었으며 현재까지 가장 높은 PID 번호는 12252입니다.
isildur

1

나는 한 시간 동안 테스트를 실행했으며 그 시간에 302 프로세스가 종료되었습니다. 그중 70 개에 PID 공통점이 있으므로 PID가 자주 재사용된다고 말할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.