글쓴이 보관물: [호호] 야야

Windows 7은 프로세스 ID를 재사용합니까? 7 시스템은 재부팅 후 몇

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

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

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

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



답변

내 테스트에서 하나의 잘못된 가정이있는 것으로 보입니다 .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 가제트 그래서이 숫자입니다 생일 문제 !)


답변

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


답변