!process
プロセス拡張は、指定されたプロセス、またはEPROCESSブロックを含むすべてのプロセスに関する情報を表示する。
この拡張機能は、カーネルモードのデバッグ中にのみ使用できる。
構文
!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName
パラメーター
/s **** Session
目的のプロセスを所有するセッションを指定する。
/m **** Module
目的のプロセスを所有するモジュールを指定する。
Process
ターゲット・コンピュータ上のプロセスの16進アドレスまたはプロセスIDを指定する。
の値である。 プロセス プロセス拡張がプロセスアドレスを表示するか、プロセスIDを表示するかを決定する。 もし プロセス を省略した場合、デバッガは現在のシステム・プロセスに関するデータのみを表示します。 もし プロセス が0で ImageName を省略すると、デバッガはすべてのアクティブなプロセスに関する情報を表示します。 に-1が指定された場合 プロセス 現在のプロセスに関する情報が表示される。
フラグ
表示する詳細レベルを指定します。 Flags には、以下のビットの任意の組み合わせを指定できます。 もし フラッグ が0の場合、最低限の情報しか表示されない。 デフォルトはWindowsのバージョンと プロセス. の場合、デフォルトは0x3である。 プロセス プロセスが省略された場合、または プロセス それ以外の場合、デフォルトは0xFである。
ビット 0 (0x1)
時間とプライオリティの統計を表示します。
ビット 1 (0x2)
プロセスに関連するスレッドとイベント、およびそれらの待機状態のリストを表示する。
ビット 2 (0x4)
プロセスに関連するスレッドのリストを表示する。 ビット1(0x2)を含まない場合、各スレッドは1行で表示される。 ビット1とともにこれを含めると、各スレッドがスタック・トレースとともに表示される。
ビット 3 (0x8)
各関数のリターンアドレスとスタックポインタを表示。 関数の引数は表示しない。
ビット 4 (0x10)
このコマンドの間、指定されたプロセスと同じプロセスコンテキストを設定する。 この結果、スレッドスタックがより正確に表示される。 このフラグは .プロセス /p /r を指定すると、既存のユーザー・モード・モジュール・リストはすべて破棄される。 もし プロセス がゼロの場合、デバッガはすべてのプロセスを表示し、プロセス・コンテキストはそれぞれ変更される。 単一のプロセスしか表示しておらず、そのユーザーモードの状態がすでにリフレッシュされている場合(たとえば .プロセス /p /r), このフラグを使う必要はない。 このフラグは、ビット0(0x1)と併用した場合のみ有効である。
ImageName
表示するプロセス名を指定する。 デバッガは、実行イメージ名が ImageName. 画像名はEPROCESSブロック内のものと一致しなければならない。 一般に、これは、プロセスを開始する際に呼び出された実行可能ファイルの名前で、ファイル拡張子 (通常は .exe) を含み、15 番目より後の文字は切り捨てられます。 スペースを含む画像名を指定する方法はありません。 いつ 画像名 が指定されている, プロセス はゼロでなければならない。
DLL
Kdexts.dll
追加情報
カーネルモードのプロセスについては、以下を参照のこと。 コンテクストの変化. プロセスやスレッドの分析についての詳細は、以下を参照のこと Microsoft Windows Internals, マーク・ラシノビッチとデイヴィッド・ソロモン著。
解説
以下はその例である。 !プロセス 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
以下の表は、その要素の一部について説明したものである。 !プロセス 0 0 出力.
要素 | 意味 |
---|---|
プロセスアドレス |
PROCESSの後に続く8文字の16進数は、EPROCESSブロックのアドレスである。 先の例の最後のエントリでは、プロセス・アドレスは0x809258E0である。 |
プロセスID (PID) |
Cidの後の16進数。 先の例の最後のエントリーでは、PIDは0x44、つまり10進数の68である。 |
プロセス環境ブロック(PEB) |
単語Pebの後の16進数は、プロセス環境ブロックのアドレスである。 先の例の最後のエントリでは、PEBはアドレス0x7FFDE000に位置している。 |
親プロセスのPID |
ParentCidの後に続く16進数は、親プロセスのPIDである。 先の例の最後のエントリでは、親プロセスのPIDは0x26、つまり10進数で38である。 |
Image |
プロセスを所有するモジュール名。 先の例の最後のエントリでは、オーナーはspoolss.exeである。 最初のエントリでは、所有者はオペレーティング・システムそのものである。 |
プロセス・オブジェクト・アドレス |
ObjectTableの後に続く16進数。 先の例の最後のエントリでは、プロセス・オブジェクトのアドレスは0x80925c68である。 |
つのプロセスの詳細を表示するには Flags to 7. プロセス自体は プロセス をプロセス・アドレスに設定する。 プロセス をプロセスIDと等しくするか 画像名 を実行イメージ名と等しくする。 例を次に示します。
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, をクリックし、詳細情報を入手する。
次の表は、先の例の要素のいくつかを説明したものである。
要素 | 意味 |
---|---|
終了 | この見出しの後の括弧付きコメントは、待たされた理由を示している。 コマンド dt nt!_KWAIT_REASON はすべての待機理由のリストを表示します。 |
ElapsedTime |
プロセスが作成されてからの経過時間を表示します。 時:分:秒:ミリ秒の単位で表示されます。 |
UserTime |
プロセスがユーザー・モードで実行されている時間のリスト。 UserTimeの値が例外的に高い場合、システムリソースを枯渇させているプロセスを特定できるかもしれない。 単位はElapsedTimeと同じ。 |
KernelTime |
プロセスがカーネルモードで実行されている時間を一覧表示する。 KernelTimeの値が例外的に高い場合、システムリソースを枯渇させているプロセスを特定できるかもしれない。 単位はElapsedTimeと同じ。 |
ワーキングセットのサイズ |
プロセスの現在、最小、最大の作業セットサイズをページ単位で表示します。 作業セット・サイズが異常に大きい場合、メモリがリークしているか、システム・リソースが枯渇しているプロセスの兆候である可能性がある。 |
QuotaPoolUsageエントリ |
プロセスが使用するページド・プールとノンページド・プールをリストする。 メモリ・リークのあるシステムでは、すべてのプロセスで過剰な非ページド・プールの使用量を調べれば、どのプロセスがメモリ・リークしているかがわかる。 |
複製 |
プロセスがPOSIXサブシステムまたはInterixサブシステムによって作成されたかどうかを示す。 |
プライベート |
プロセスが現在使用しているプライベート(シャラブルでない)ページの数を示す。 これには、ページインとページアウトの両方のメモリが含まれる。 |
プロセスリスト情報に加えて、スレッド情報にはスレッドがロックしているリソースのリストが含まれる。 この情報は、スレッドヘッダーの後の出力の3行目に記載される。 この例では、スレッドは80144fc0のアドレスを持つSynchronizationEventという1つのリソースをロックしている。 で示されるロックのリストとこのアドレスを比較する。 !kdext*.locks 拡張機能を使えば、どのスレッドがリソースを排他的にロックしているかを判断できる。
について !stacks エクステンションは、各スレッドの状態を簡単に要約する。 特に、リソースの競合やデッドロックなど、マルチスレッドの問題をデバッグする際に、システムの概要を素早く把握するために、!processエクステンションの代わりに使うことができる。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示