web-dev-qa-db-ja.com

プロセスハンドルとは

プロセスハンドルとは何ですか?タスクエクスプローラーの "ハンドルカウント"プロパティを通じて実行中のプロセスについて何を知ることができますか?

enter image description here

17
BlueGene

プロセスハンドルは、Windowsに対してプロセスを識別する整数値です。 Win32 APIはそれらをHANDLEと呼びます。ウィンドウへのハンドルはHWNDと呼ばれ、モジュールHMODULEへのハンドルです。

プロセス内のスレッドにはスレッドハンドルがあり、ファイルやその他のリソース(レジストリキーなど)にもハンドルがあります。

タスクマネージャに表示されるハンドル数は、「 プロセスのオブジェクトテーブル内のオブジェクトハンドルの数 」です。実際には、これはこのプロセスが開いたすべてのハンドルの合計です。

リソースへのハンドルを解放しないと、他の人がそのリソースにアクセスできなくなる可能性があります-これは、Windowsがファイルが使用中であると主張しているためにファイルを削除できないことがある理由です(チェックアウト ハンドルリークに関するこの記事とプロセスエクスプローラー )。

また、さまざまなハンドルにはプロセスごとの制限があります。 ここに例があります

一般に、ハンドルを開いて閉じない場合は、メモリリークと似ています。何が起こっているのかを理解して修正する必要があります。良い ハンドルリークに関するCodeProjectの記事 があります。

25
crb

ハンドルは、オブジェクトのアドレス指定に使用される整数値です。例えば:

_int handle = open( "foo.txt", OTHER_STUFF_HERE );
_

open() is System Callは、ハンドル、後続のシステムコール(read(2)、write(2)、lseek(2)、fcntl(2)など)で使用するための負でない小さな整数を返します。 )。

Windowsハンドルは、Unixファイル記述子(FD)と非常によく似ています。

2
Premraj