!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エクステンションの代わりに使うことができる。