!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.