!process
!process 拡張機能は、指定されたプロセスに関する情報、または EPROCESS ブロックを含むすべてのプロセスに関する情報を表示します。
この拡張機能は、カーネル モードのデバッグ中にのみ使用できます。
構文
!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName
パラメーター
/s **** Session
目的のプロセスを所有するセッションを指定します。
/m **** Module
目的のプロセスを所有するモジュールを指定します。
Process
ターゲット コンピューター上のプロセスの 16 進アドレスまたはプロセス ID を指定します。
!process 拡張機能で表示される値がプロセス アドレスかプロセス ID であるかは、Process の値によって決まります。 Windows のバージョンを問わず、Process を省略した場合は、現在のシステム プロセスに関するデータのみが表示されます。 Process の値が 0 で ImageName を省略した場合は、すべてのアクティブなプロセスに関する情報が表示されます。 Process に -1 を指定した場合は、現在のプロセスの情報が表示されます。
Flags
表示する詳細レベルを指定します。 Flags には、以下のビットの任意の組み合わせを指定できます。 Flags が 0 の場合、最小限の情報のみが表示されます。 既定値は、Windows のバージョンと Process の値によって異なります。 Process が省略された場合と、Process が 0 または -1 の場合の既定値は 0x3 です。それ以外の場合の既定値は 0xF です。
ビット 0 (0x1)
時間と優先度の統計情報を表示します。
ビット 1 (0x2)
プロセスに関連付けられているスレッドとイベントのリスト、およびこれらの待機状態を表示します。
ビット 2 (0x4)
プロセスに関連付けられているスレッドのリストを表示します。 ビット 1 (0x2) を含めずにこれを含めた場合は、各スレッドが 1 行で表示されます。 ビット 1 と共にこれを含めた場合は、各スレッドがスタック トレースと共に表示されます。
ビット 3 (0x8)
関数ごとのリターン アドレスとスタック ポインターを表示します。関数の引数は表示されません。
ビット 4 (0x10)
このコマンドの実行中、指定されたプロセスに等しいプロセス コンテキストを設定します。 これにより、スレッド スタックがより正確に表示されます。 このフラグの使用には、指定されたプロセスに対して .process /p /r を使用した場合と同じ効力があるため、既存のユーザー モード モジュール リストはすべて破棄されます。 Process がゼロの場合はすべてのプロセスが表示され、プロセスごとにプロセス コンテキストが変更されます。 表示対象が単一のプロセスのみであり、そのプロセスのユーザー モード状態が既に (.process /p /r を使用するなどにより) 更新されている場合、このフラグを使用する必要はありません。 このフラグは、ビット 0 (0x1) と共に使用した場合にのみ有効です。
ImageName
表示するプロセスの名前を指定します。 デバッガーは、実行可能イメージ名が ImageName と一致するすべてのプロセスを表示します。 イメージ名は EPROCESS ブロック内のものと一致する必要があります。 一般に、これは、プロセスを開始する際に呼び出された実行可能ファイルの名前であり、ファイル拡張子 (通常は .exe) が含まれ、15 番目より後の文字は切り捨てられます。 スペースを含むイメージ名を指定する方法はありません。 ImageName を指定する場合は、Process をゼロにする必要があります。
DLL
Kdexts.dll
追加情報
カーネル モードのプロセスについては、「コンテキストの変更」を参照してください。 プロセスとスレッドの分析の詳細については、『Microsoft Windows Internals』 (Mark Russinovich および David Solomon 共著) を参照してください。
解説
以下は、!process 0 0 の表示例です。
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150.
Image: System
PROCESS 80986f40 Cid: 0012 Peb: 7ffde000 ParentCid: 0002
DirBase: 000bd605 ObjectTable: 8098fce8 TableSize: 38.
Image: smss.exe
PROCESS 80958020 Cid: 001a Peb: 7ffde000 ParentCid: 0012
DirBase: 0008b205 ObjectTable: 809782a8 TableSize: 150.
Image: csrss.exe
PROCESS 80955040 Cid: 0020 Peb: 7ffde000 ParentCid: 0012
DirBase: 00112005 ObjectTable: 80955ce8 TableSize: 54.
Image: winlogon.exe
PROCESS 8094fce0 Cid: 0026 Peb: 7ffde000 ParentCid: 0020
DirBase: 00055005 ObjectTable: 80950cc8 TableSize: 222.
Image: services.exe
PROCESS 8094c020 Cid: 0029 Peb: 7ffde000 ParentCid: 0020
DirBase: 000c4605 ObjectTable: 80990fe8 TableSize: 110.
Image: lsass.exe
PROCESS 809258e0 Cid: 0044 Peb: 7ffde000 ParentCid: 0026
DirBase: 001e5405 ObjectTable: 80925c68 TableSize: 70.
Image: SPOOLSS.EXE
次の表では、!process 0 0 からの出力に含まれる要素について説明しています。
要素 | 意味 |
---|---|
プロセス アドレス |
PROCESS という語の後に表示される 8 文字の 16 進数は、EPROCESS ブロックのアドレスです。 上の例の最後のエントリでは、プロセス アドレスは 0x809258E0 です。 |
プロセス ID (PID) |
Cid という語の後に表示される 16 進数。 上の例の最後のエントリでは、PID は 0x44、つまり 10 進数の 68 です。 |
プロセス環境ブロック (PEB) |
Peb という語の後に表示される 16 進数は、プロセス環境ブロックのアドレスです。 上の例の最後のエントリの場合、PEB のアドレス位置は 0x7FFDE000 です。 |
親プロセスの PID |
arentCid という語の後に表示される 16 進数は、親プロセスの PID です。 上の例の最後のエントリでは、親プロセスの PID は 0x26、つまり 10 進数の 38 です。 |
Image |
プロセスを所有するモジュールの名前です。 上の例の最後のエントリでは、所有者は spoolss.exe です。 最初のエントリでは、所有者はオペレーティング システムです。 |
プロセス オブジェクト アドレス |
ObjectTable という語の後に表示される 16 進数です。 上の例の最後のエントリでは、プロセス オブジェクトのアドレスは 0x80925c68 です。 |
1 つのプロセスの完全な詳細情報を表示するには、Flags を 7 に設定します。 プロセス自体は、Process をプロセス アドレスに設定するか、Process をプロセス ID に設定するか、ImageName を実行可能イメージ名に設定することによって指定できます。 例を次に示します。
kd> !process fb667a00 7
PROCESS fb667a00 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: e1000f88 TableSize: 112.
Image: System
VadRoot fb666388 Clone 0 Private 4. Modified 9850. Locked 0.
FB667BBC MutantState Signalled OwningThread 0
Token e10008f0
ElapsedTime 15:06:36.0338
UserTime 0:00:00.0000
KernelTime 0:00:54.0818
QuotaPoolUsage[PagedPool] 1480
Working Set Sizes (now,min,max) (3, 50, 345)
PeakWorkingSetSize 118
VirtualSize 1 Mb
PeakVirtualSize 1 Mb
PageFaultCount 992
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 8
THREAD fb667780 Cid 2.1 Teb: 00000000 Win32Thread: 80144900 WAIT: (WrFreePage) KernelMode Non-Alertable
80144fc0 SynchronizationEvent
Not impersonating
Owning Process fb667a00
WaitTime (seconds) 32278
Context Switch Count 787
UserTime 0:00:00.0000
KernelTime 0:00:21.0821
Start Address Phase1Initialization (0x801aab44)
Initial Sp fb26f000 Current Sp fb26ed00
Priority 0 BasePriority 0 PriorityDecrement 0 DecrementCount 0
ChildEBP RetAddr Args to Child
fb26ed18 80118efc c0502000 804044b0 00000000 KiSwapThread+0xb5
fb26ed3c 801289d9 80144fc0 00000008 00000000 KeWaitForSingleObject+0x1c2
プロセス オブジェクトのアドレスは、さらに詳しい情報を取得するために、!handle など、他の拡張機能への入力として使用できます。
次の表では、上の例に含まれる要素について説明しています。
要素 | 意味 |
---|---|
WAIT | この見出しの後の括弧内のコメントには、待機の理由が示されています。 コマンド dt nt!_KWAIT_REASON を実行すると、すべての待機理由のリストを表示できます。 |
ElapsedTime |
プロセスが作成されてからの経過時間を表示します。 時:分:秒.ミリ秒の単位で表示されます。 |
UserTime |
プロセスがユーザー モードで実行されている時間を表示します。 UserTime の値が異常に大きい場合は、プロセスによるシステム リソースの枯渇を示している可能性があります。 単位は ElapsedTime の場合と同じです。 |
KernelTime |
プロセスがカーネル モードで実行されている時間を示します。 KernelTime の値が異常に大きい場合は、プロセスによるシステム リソースの枯渇を示している可能性があります。 単位は ElapsedTime の場合と同じです。 |
Working Set Sizes |
プロセスの現在、最小、最大のワーキング セット サイズをページ数単位で示します。 ワーキング セット サイズが異常に大きい場合は、プロセスでのメモリ リークまたはシステム リソースの枯渇を示している可能性があります。 |
QuotaPoolUsage エントリ |
プロセスによるページ プールと非ページ プールの使用量を示します。 メモリ リークが発生しているシステムでは、すべてのプロセスで過剰な非ページ プールの使用を調べると、どのプロセスでメモリ リークが発生しているかを知ることができます。 |
Clone |
プロセスが POSIX サブシステムまたは Interix サブシステムによって作成されたかどうかを示します。 |
Private |
プロセスによって現在使用されているプライベート (共有不可) ページの数を示します。 これには、ページイン メモリとページアウト メモリの両方が含まれます。 |
スレッド情報には、プロセス リスト情報に加えて、スレッドがロックしているリソースのリストが含まれます。 出力では、この情報はスレッド ヘッダーの後の 3 行目に表示されます。 この例では、スレッドは 1 つのリソース (アドレス 80144fc0 の SynchronizationEvent) をロックしています。 このアドレスと、!kdext*.locks 拡張機能で表示されるロックのリストを比較することで、どのスレッドがリソースを排他的にロックをしているかを判断できます。
!stacks 拡張機能は、すべてのスレッドの状態の簡単な概要を提供します。 これを !process 拡張子の代わりに使用すると、特にリソースの競合やデッドロックなどマルチスレッドの問題をデバッグする場合に、システムの概要を簡単に把握できます。