Condividi tramite


!processo

L'estensione !process visualizza informazioni sul processo specificato o su tutti i processi, incluso il blocco EPROCESS.

Questa estensione può essere usata solo durante il debug in modalità kernel.

Sintassi

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

Parametri

/s **** Sessione
Specifica la sessione proprietaria del processo desiderato.

Modulo /m ****
Specifica il modulo proprietario del processo desiderato.

Processo
Specifica l'indirizzo esadecimale o l'ID del processo nel computer di destinazione.

Il valore di Process determina se l'estensione !process visualizza un indirizzo di processo o un ID processo. Se Process viene omesso in qualsiasi versione di Windows, il debugger visualizza solo i dati relativi al processo di sistema corrente. Se Process è 0 e ImageName viene omesso, il debugger visualizza informazioni su tutti i processi attivi. Se si specifica -1 per Le informazioni sul processo corrente vengono visualizzate.

Flag
Specifica il livello di dettaglio da visualizzare. I flag possono essere qualsiasi combinazione dei bit seguenti. Se Flags è 0, viene visualizzata solo una quantità minima di informazioni. Il valore predefinito varia in base alla versione di Windows e al valore di Process. Il valore predefinito è 0x3 se Process viene omesso o se Process è 0 o -1; in caso contrario, il valore predefinito è 0xF.

Bit 0 (0x1)
Visualizza le statistiche relative all'ora e alla priorità.

Bit 1 (0x2)
Visualizza un elenco di thread ed eventi associati al processo e i relativi stati di attesa.

Bit 2 (0x4)
Visualizza un elenco di thread associati al processo. Se è incluso senza Bit 1 (0x2), ogni thread viene visualizzato su una singola riga. Se viene incluso insieme a Bit 1, ogni thread viene visualizzato con un'analisi dello stack.

Bit 3 (0x8)
Visualizza l'indirizzo restituito e il puntatore dello stack per ogni funzione La visualizzazione degli argomenti della funzione viene eliminata.

Bit 4 (0x10)
Imposta il contesto del processo uguale al processo specificato per la durata di questo comando. Ciò comporta una visualizzazione più accurata degli stack di thread. Poiché questo flag equivale all'uso di .process /p /r per il processo specificato, qualsiasi elenco di moduli in modalità utente esistente verrà rimosso. Se Process è zero, il debugger visualizza tutti i processi e il contesto del processo viene modificato per ognuno di essi. Se si visualizza solo un singolo processo e il relativo stato in modalità utente è già stato aggiornato (ad esempio, con .process /p /r), non è necessario usare questo flag. Questo flag è efficace solo se usato con Bit 0 (0x1).

ImageName
Specifica il nome del processo da visualizzare. Il debugger visualizza tutti i processi i cui nomi di immagine eseguibile corrispondono a ImageName. Il nome dell'immagine deve corrispondere a quello nel blocco EPROCESS. In generale, si tratta del nome eseguibile richiamato per avviare il processo, inclusa l'estensione di file (in genere .exe) e troncata dopo il quindicesimo carattere. Non è possibile specificare un nome di immagine contenente uno spazio. Quando si specifica ImageName , Process deve essere zero.

DLL

Kdexts.dll

Informazioni aggiuntive

Per informazioni sui processi in modalità kernel, vedere Modifica dei contesti. Per altre informazioni sull'analisi di processi e thread, vedere Microsoft Windows Internals, di Mark Russinovich e David Solomon.

Osservazioni:

Di seguito è riportato un esempio di visualizzazione !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

La tabella seguente descrive alcuni degli elementi dell'output !process 0 0 .

Elemento significato

Indirizzo del processo

Il numero esadecimale a otto caratteri dopo la parola PROCESS è l'indirizzo del blocco EPROCESS. Nella voce finale dell'esempio precedente, l'indirizzo del processo è 0x809258E0.

ID processo (PID)

Numero esadecimale dopo la parola Cid. Nella voce finale dell'esempio precedente il PID è 0x44 o decimale 68.

Blocco dell'ambiente di elaborazione (PEB)

Numero esadecimale dopo la parola Peb è l'indirizzo del blocco di ambiente del processo. Nella voce finale dell'esempio precedente, il PEB si trova all'indirizzo 0x7FFDE000.

PID processo padre

Il numero esadecimale dopo la parola ParentCid è il PID del processo padre. Nella voce finale dell'esempio precedente il PID del processo padre è 0x26 o decimale 38.

Immagine

Nome del modulo proprietario del processo. Nella voce finale dell'esempio precedente il proprietario è spoolss.exe. Nella prima voce il proprietario è il sistema operativo stesso.

Indirizzo dell'oggetto processo

Numero esadecimale dopo la parola ObjectTable. Nella voce finale dell'esempio precedente, l'indirizzo dell'oggetto processo è 0x80925c68.

Per visualizzare i dettagli completi su un processo, impostare Flag su 7. Il processo stesso può essere specificato impostando Process uguale all'indirizzo del processo, impostando Process uguale all'ID processo o impostando ImageName uguale al nome dell'immagine eseguibile. Ecco un esempio:

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

Si noti che l'indirizzo dell'oggetto processo può essere usato come input per altre estensioni, ad esempio !handle, per ottenere ulteriori informazioni.

Nella tabella seguente vengono descritti alcuni degli elementi dell'esempio precedente.

Elemento significato
ASPETTARE Il commento tra parentesi dopo questa intestazione indica il motivo dell'attesa. Il comando dt nt!_KWAIT_REASON visualizzerà un elenco di tutti i motivi di attesa.

ElapsedTime

Elenca l'intervallo di tempo trascorso dopo la creazione del processo. Questa opzione viene visualizzata in unità di ore:minuti:secondi.millisecondi.

Tempi

Elenca la quantità di tempo in cui il processo è stato eseguito in modalità utente. Se il valore di UserTime è estremamente elevato, potrebbe identificare un processo che sta esaurendo le risorse di sistema. Le unità sono uguali a quelle di ElapsedTime.

KernelTime

Elenca la quantità di tempo in cui il processo è stato eseguito in modalità kernel. Se il valore per KernelTime è estremamente elevato, potrebbe identificare un processo che sta esaurendo le risorse di sistema. Le unità sono uguali a quelle di ElapsedTime.

Dimensioni del set di lavoro

Elenca le dimensioni correnti, minime e massime del working set per il processo, nelle pagine. Una dimensione del working set estremamente grande può essere un segno di un processo che sta perdendo memoria o esaurisce le risorse di sistema.

Voci QuotaPoolUsage

Elenca il pool di paging e non di paging utilizzato dal processo. In un sistema con una perdita di memoria, cercare un utilizzo eccessivo di pool non di paging in tutti i processi può indicare quale processo ha la perdita di memoria.

Clona

Indica se il processo è stato creato dai sottosistemi POSIX o Interix.

Privata

Indica il numero di pagine private (non condivisibili) attualmente utilizzate dal processo. Sono inclusi sia il paging in che la memoria di paging.This includes both paged in and paged out memory.

Oltre alle informazioni sull'elenco dei processi, le informazioni sul thread contengono un elenco delle risorse in cui il thread ha blocchi. Queste informazioni sono elencate nella terza riga di output dopo l'intestazione del thread. In questo esempio il thread ha un blocco su una risorsa, synchronizationEvent con un indirizzo 80144fc0. Confrontando questo indirizzo con l'elenco dei blocchi visualizzati dall'estensione !sessionxt*.locks , è possibile determinare quali thread hanno blocchi esclusivi sulle risorse.

L'estensione !stacks fornisce un breve riepilogo dello stato di ogni thread. Questa opzione può essere usata invece dell'estensione !process per ottenere una rapida panoramica del sistema, soprattutto quando si esegue il debug di problemi multithread, ad esempio conflitti di risorse o deadlock.