!Proses

Ekstensi !process menampilkan informasi tentang proses yang ditentukan, atau tentang semua proses, termasuk blok EPROCESS.

Ekstensi ini hanya dapat digunakan selama penelusuran kesalahan mode kernel.

Sintaks

!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName

Parameter

Sesi /s ****
Menentukan sesi yang memiliki proses yang diinginkan.

Modul /m ****
Menentukan modul yang memiliki proses yang diinginkan.

Proses
Menentukan alamat heksadesimal atau ID proses proses pada komputer target.

Nilai Proses menentukan apakah ekstensi !process menampilkan alamat proses atau ID proses . Jika Proses dihilangkan dalam versi Windows apa pun, debugger hanya menampilkan data tentang proses sistem saat ini. Jika Proses adalah 0 dan ImageName dihilangkan, debugger menampilkan informasi tentang semua proses aktif. Jika -1 ditentukan untuk Informasi proses tentang proses saat ini ditampilkan.

Bendera
Menentukan tingkat detail yang akan ditampilkan. Bendera dapat berupa kombinasi bit berikut. Jika Bendera adalah 0, hanya sejumlah minimal informasi yang ditampilkan. Default bervariasi sesuai dengan versi Windows dan nilai Proses. Defaultnya adalah 0x3 jika Proses dihilangkan atau jika Proses adalah 0 atau -1; jika tidak, defaultnya adalah 0xF.

Bit 0 (0x1)
Menampilkan statistik waktu dan prioritas.

Bit 1 (0x2)
Menampilkan daftar utas dan peristiwa yang terkait dengan proses, dan status tunggunya.

Bit 2 (0x4)
Menampilkan daftar utas yang terkait dengan proses. Jika ini disertakan tanpa Bit 1 (0x2), setiap utas ditampilkan pada satu baris. Jika ini disertakan bersama dengan Bit 1, setiap utas ditampilkan dengan pelacakan tumpukan.

Bit 3 (0x8)
Menampilkan alamat pengembalian dan penunjuk tumpukan untuk setiap fungsi Tampilan argumen fungsi ditekan.

Bit 4 (0x10)
Mengatur konteks proses yang sama dengan proses yang ditentukan selama durasi perintah ini. Ini menghasilkan tampilan tumpukan utas yang lebih akurat. Karena bendera ini setara dengan menggunakan .process /p /r untuk proses yang ditentukan, daftar modul mode pengguna yang ada akan dibuang. Jika Proses nol, debugger menampilkan semua proses, dan konteks proses diubah untuk masing-masing proses. Jika Anda hanya menampilkan satu proses dan status mode penggunanya telah di-refresh (misalnya, dengan .process /p /r), tidak perlu menggunakan bendera ini. Bendera ini hanya efektif ketika digunakan dengan Bit 0 (0x1).

ImageName
Menentukan nama proses yang akan ditampilkan. Debugger menampilkan semua proses yang nama gambar yang dapat dieksekusi cocok dengan ImageName. Nama gambar harus cocok dengan yang ada di blok EPROCESS. Secara umum, ini adalah nama yang dapat dieksekusi yang dipanggil untuk memulai proses, termasuk ekstensi file (biasanya .exe), dan dipotong setelah karakter kelima belas. Tidak ada cara untuk menentukan nama gambar yang berisi spasi. Ketika ImageName ditentukan, Proses harus nol.

DLL

Kdexts.dll

Informasi Tambahan

Untuk informasi tentang proses dalam mode kernel, lihat Mengubah Konteks. Untuk informasi selengkapnya tentang menganalisis proses dan utas, lihat Microsoft Windows Internals, oleh Mark Russinovich dan David Solomon.

Keterangan

Berikut ini adalah contoh tampilan !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

Tabel berikut ini menjelaskan beberapa elemen output !process 0 0 .

Elemen Makna

Alamat proses

Angka heksadesimal delapan karakter setelah kata PROCESS adalah alamat blok EPROCESS. Dalam entri akhir dalam contoh sebelumnya, alamat proses 0x809258E0.

ID Proses (PID)

Angka heksadesimal setelah kata Cid. Dalam entri akhir dalam contoh sebelumnya, PID 0x44, atau desimal 68.

Blok Lingkungan Proses (PEB)

Nomor heksadesimal setelah kata Peb adalah alamat blok lingkungan proses. Dalam entri akhir dalam contoh sebelumnya, PEB terletak di alamat 0x7FFDE000.

PID proses induk

Angka heksadesimal setelah kata ParentCid adalah PID dari proses induk. Dalam entri akhir dalam contoh sebelumnya, PID proses induk 0x26, atau desimal 38.

Gambar

Nama modul yang memiliki proses. Dalam entri akhir dalam contoh sebelumnya, pemilik spoolss.exe. Dalam entri pertama, pemilik adalah sistem operasi itu sendiri.

Alamat objek proses

Angka heksadesimal setelah kata ObjectTable. Dalam entri akhir dalam contoh sebelumnya, alamat objek proses 0x80925c68.

Untuk menampilkan detail lengkap pada satu proses, atur Bendera ke 7. Proses itu sendiri dapat ditentukan dengan mengatur Proses yang sama dengan alamat proses, mengatur Proses yang sama dengan ID proses, atau mengatur ImageName sama dengan nama gambar yang dapat dieksekusi. Berikut adalah contoh:

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

Perhatikan bahwa alamat objek proses dapat digunakan sebagai input ke ekstensi lain, seperti !handle, untuk mendapatkan informasi lebih lanjut.

Tabel berikut ini menjelaskan beberapa elemen dalam contoh sebelumnya.

Elemen Makna
TUNGGU Komentar tanda kurung setelah judul ini memberikan alasan untuk menunggu. Perintah dt nt!_KWAIT_REASON akan menampilkan daftar semua alasan tunggu.

ElapsedTime

Mencantumkan jumlah waktu yang telah berlalu sejak proses dibuat. Ini ditampilkan dalam satuan Jam:Menit:Detik.Milidetik.

UserTime

Mencantumkan jumlah waktu proses telah berjalan dalam mode pengguna. Jika nilai untuk UserTime sangat tinggi, nilai tersebut mungkin mengidentifikasi proses yang menguras sumber daya sistem. Unit sama dengan ElapsedTime.

KernelTime

Mencantumkan jumlah waktu proses telah berjalan dalam mode kernel. Jika nilai untuk KernelTime sangat tinggi, nilai tersebut mungkin mengidentifikasi proses yang menguras sumber daya sistem. Unit sama dengan ElapsedTime.

Ukuran Set Kerja

Mencantumkan ukuran set kerja saat ini, minimum, dan maksimum untuk proses, di halaman. Ukuran set kerja yang sangat besar dapat menjadi tanda proses yang membocorkan memori atau menipiskan sumber daya sistem.

Entri QuotaPoolUsage

Mencantumkan kumpulan halaman dan yang tidak dipagasi yang digunakan oleh proses. Pada sistem dengan kebocoran memori, mencari penggunaan kumpulan yang tidak dipagasi yang berlebihan pada semua proses dapat memberi tahu Anda proses mana yang memiliki kebocoran memori.

Klon

Menunjukkan apakah proses dibuat oleh subsistem POSIX atau Interix atau tidak.

Privat

Menunjukkan jumlah halaman privat (tidak dapat dibagikan) yang saat ini digunakan oleh proses. Ini termasuk memori paged in dan paged out.

Selain informasi daftar proses, informasi utas berisi daftar sumber daya tempat utas memiliki kunci. Informasi ini tercantum di baris ketiga output setelah header utas. Dalam contoh ini, utas memiliki kunci pada satu sumber daya, SynchronizationEvent dengan alamat 80144fc0. Dengan membandingkan alamat ini dengan daftar kunci yang ditunjukkan oleh ekstensi !kdext*.locks , Anda dapat menentukan utas mana yang memiliki kunci eksklusif pada sumber daya.

Ekstensi !stacks memberikan ringkasan singkat tentang status setiap utas. Ini dapat digunakan alih-alih ekstensi !process untuk mendapatkan gambaran umum singkat tentang sistem, terutama ketika men-debug masalah multithread, seperti konflik sumber daya atau kebuntuan.