2011-01-04 6 views
1

プロセス識別子(別名PID)がWindowsでどのように生成されているか知りたいと思います。異なるマシン間でユニークですか?たとえば、私のFirefoxプログラムに現在割り当てられている5856 IDを考えてみてください。別のマシンの下で同じ実行可能イメージと同じですか?Windowsでは、カーネルモードでPID(Process Indentifier)がどのように生成されますか?

答えて

1

プロセス識別子は、異なるマシン間で一意ではありません。それらは、後のプロセスのために同じマシン上で再利用することができ、同じ実行可能ファイルの2回の呼び出しの間で同じではありません。

どのように生成されているか気にする必要はありません。確かなことは、プロセス識別子が実行中のプロセスを一意に識別していることだけです。つまり、一度。

+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 10で1回見ましたが、6桁のPIDもあります。しかし、これはまれです。 –

0

プロセスはカーネル内のオブジェクトとして管理され、HANDLEを介してシステム内の他のすべてのオブジェクト(イベント、mutex、セマフォ、タイマーなど)と同じ方法でユーザーモードにエクスポートされます。

したがって、プロセスIDは実際にはグローバル処理テーブル(実装の詳細としてのPspCidTable)で管理されているオブジェクトを処理するためのハンドルです。面白いことに、スレッドはオブジェクトとしても管理され、このテーブルにも挿入されます。スレッドIDは実際にはスレッドオブジェクトのハンドルにすぎません。

-scott

関連する問題