Windows 7はプロセスIDを再利用しますか?
私がこの質問をする理由は、Windows XPであり、Linuxは20〜30kを超えるプロセスIDを生成するようには思われないという経験です。しかし、私のWindows 7マシンは5までのIDに到達します再起動後数時間以内に–10k程度、これは過去からの私の通常の経験です。翌朝チェックすると、一部のプロセスが250k以上ですが、そうではありません。
セキュリティ監査機能をアクティブにして、プロセスの作成と終了をログに記録しました。何百、何千、またはプロセスを生成しているものはありません。これらのイベントのうち513のみが24時間登録されていますが、数十万のプロセスIDが使用されているようです。
私は自分の質問を検索しようとしましたが、以前に尋ねられた提案された質問の1つは、 Mark Russinovichのすばらしいブログ を指しています。しかし、この記事は非常に興味深い読み物ですが、私は戸惑いました。
私のテストから、あなたには1つの誤った仮定があるように見えます、PID番号は順番に与えられていません。これは非常に簡単に証明できます。コマンドラインから次のコマンドを実行します。メモ帳を3つ開く必要があります。
notepad & notepad & notepad
私のマシンには、すべてが同時に開いた3つのコピーのPIDがあります。
PIDのジャンプが頻繁に見られるように、一度に1つずつ開くと、次のPIDが前のPIDよりも常に大きいとは限らないこともわかります。たとえば、メモ帳の4番目のコピーを開いて、これを取得しました
したがって、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回実行すると、常に134
および147
同じPIDを再利用するためのメモ帳の起動(この数が非常に小さいのはなぜですか?GO-GOガジェット 誕生日の問題 !)
私は1時間テストを実行し、その間に302プロセスが終了しました。これらのうち、70は共通のPIDを持っていたので、PIDは頻繁に再利用されます。