Windows 7はプロセスIDを再利用しますか?


19

Windows 7はプロセスIDを再利用しますか?

この質問をする理由は、Windows XPおよびLinuxが20〜30kを超えるプロセスIDを生成することはないという私の経験によるものです。ただし、私のWindows 7マシンは、再起動後数時間以内に5〜10k程度のIDに到達します。これは過去の私の通常の経験です。翌朝チェックすると、一部のプロセスは250k以上ですが、そうではありません。

プロセスの作成と終了を記録するセキュリティ監査機能を有効にしました。何百、何千、またはプロセスを生成するものはありません。これらのイベントのうち513のみが24時間登録されていますが、数十万のプロセスIDが使用されているようです。

私は自分の質問を検索してみましたが、以前に尋ねられた提案された質問の1つはMark Russinovichの素晴らしいブログを指しています。しかし、この記事は非常に興味深い読み物ですが、私を困惑させました。


2
私は、彼らが...再起動後にリセット賭ける
オースティンTフランス語

3
もちろん、ブートが開始されたときにプロセスがまったくないので、そうなります。したがって、4を超えるすべてのPIDは使用されません。
-grawity

1
彼のポイントは、Windowsが最終的にPIDを再利用しない限り、使い果たされて再起動が必要になるということだと思います。
サイモンリヒター

回答:


22

私のテストでは、PID番号が順番に与えられないという1つの誤った仮定があるようです。これを証明するのは非常に簡単です。コマンドラインから次のコマンドを実行してください。メモ帳のコピーを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ガジェットのためのメモ帳の起動を誕生日の問題を!)


5
PIDは常に4の倍数であるため、Windows NTではさらに高速になります。
-grawity

スコットありがとう。すべてのプロセスのPID番号を追跡し、割り当てられたプロセスの名前でファイルに記録できるシェルスクリプト/ユーティリティはありますか?
-isildur

1
可能ですが、その有用性はわかりません。開始されたすべてのプロセスを追跡したいだけですか、それともPIDを本当に気にしていますか?
スコットチェンバレン

この時点で、どのプロセスが何回も実行されており、プロセスID番号が500k +の範囲にプッシュされていることを知りたいだけです。おそらく、プロセスはプロセスを生成しているだけです。これは、基本的なwin 7デスクトップ、ウイルス対策、firefox、ゲーム1つまたは2つであり、他のことはあまり行いません。返信いただきありがとうございます。
-isildur

だから、何年も前に誰かが書いたバッチファイルを使用してディスクドライブのインデックスを作成する古いユーティリティを削除しましたが、これがこのような高いPID番号を生成する犯人であることがわかりました。これで、同じマシンが数週間稼働し、現在までの最高のPID番号は12252です。
isildur

1

1時間テストを実行しましたが、その間に302プロセスが終了しました。これらのうち、70には共通のPIDがあったため、PIDは頻繁に再利用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.