!process

La extensión !process muestra información sobre el proceso especificado o sobre todos los procesos, incluido el bloque EPROCESS.

Esta extensión solo se puede usar durante la depuración en modo kernel.

Sintaxis

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

Parámetros

/s **** Sesión
Especifica la sesión a la que pertenece el proceso deseado.

/m **** Módulo
Especifica el módulo al que pertenece el proceso deseado.

Process
Especifica la dirección hexadecimal o el identificador de proceso del proceso en el equipo de destino.

El valor de Process determina si la extensión !process muestra una dirección de proceso o un identificador de proceso . Si Process se omite en cualquier versión de Windows, el depurador solo muestra datos sobre el proceso del sistema actual. Si Process es 0 e ImageName se omite, el depurador muestra información sobre todos los procesos activos. Si se especifica -1 para Process, se muestra información sobre el proceso actual.

Marcas
Especifica el nivel de detalle que se muestra. Flags puede ser cualquier combinación de los siguientes bits. Si Flags es igual a 0, solo se muestra una cantidad mínima de información. El valor predeterminado varía según la versión de Windows y el valor de Process. El valor predeterminado es 0x3 si se omite Process o si Process es 0 o -1; de lo contrario, el valor predeterminado es 0xF.

Bit 0 (0x1)
Muestra estadísticas de tiempo y prioridad.

Bit 1 (0x2)
Muestra una lista de subprocesos y eventos asociados al proceso y sus estados de espera.

Bit 2 (0x4)
Muestra una lista de subprocesos asociados al proceso. Si se incluye sin Bit 1 (0x2), cada subproceso se muestra en una sola línea. Si se incluye con Bit 1, cada subproceso se muestra con un seguimiento de la pila.

Bit 3 (0x8)
Muestra la dirección de retorno y el puntero de pila para cada función Se suprime la presentación de argumentos de función.

Bit 4 (0x10)
Establece el mismo contexto del proceso que el del proceso especificado durante la duración de este comando. Esto da como resultado una visualización más precisa de las pilas de subprocesos. Dado que esta marca es equivalente a usar .process /p /r para el proceso especificado, se descartará cualquier lista de módulos en modo de usuario existente. Si el valor de Process es cero, el depurador muestra todos los procesos y el contexto del proceso se cambia para cada uno. Si solo muestra un único proceso y su estado en modo de usuario ya se ha actualizado (por ejemplo, con .process /p /r), no es necesario usar esta marca. Esta marca solo es efectiva cuando se usa con Bit 0 (0x1).

ImageName
Especifica el nombre del proceso que se va a mostrar. El depurador muestra todos los procesos cuyos nombres de imagen ejecutables coinciden con ImageName. El nombre de la imagen debe coincidir con el del bloque EPROCESS. En general, se trata del nombre del ejecutable que se invocó para iniciar el proceso, incluida la extensión del archivo (normalmente .exe), y truncado después del decimoquinto carácter. No hay posibilidad de especificar un nombre de imagen que contenga un espacio. Cuando se especifica ImageName, el valor de Process debe ser cero.

Archivo DLL

Kdexts.dll

Información adicional

Para obtener información sobre procesos en modo kernel, consulte Cambio de contextos. Para obtener más información sobre el análisis de procesos y subprocesos, consulte Microsoft Windows Internals por Mark Russinovich y David Solomon.

Comentarios

A continuación se muestra un ejemplo de una visualización de !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

En la tabla siguiente se describen algunos de los elementos de la salida !process 0 0.

Elemento Significado

Dirección del proceso

El número hexadecimal de ocho caracteres después de la palabra PROCESS es la dirección del bloque EPROCESS. En la entrada final del ejemplo anterior, la dirección del proceso se 0x809258E0.

Identificador del proceso (PID)

Número hexadecimal después de la palabra Cid. En la entrada final del ejemplo anterior, el PID es 0x44 o decimal 68.

Bloque de Entorno de Proceso (PEB)

El número hexadecimal después de la palabra Peb es la dirección del bloque de entorno de proceso. En la entrada final del ejemplo anterior, el PEB se encuentra en la dirección 0x7FFDE000.

PID del proceso primario

El número hexadecimal después de la palabra ParentCid es el PID del proceso primario. En la entrada final del ejemplo anterior, el PID del proceso primario es 0x26 o decimal 38.

Imagen

Nombre del módulo al que pertenece el proceso. En la entrada final del ejemplo anterior, el módulo es spoolss.exe. En la primera entrada, el propietario es el propio sistema operativo.

Dirección del objeto de proceso

Número hexadecimal después de la palabra ObjectTable. En la entrada final del ejemplo anterior, la dirección del objeto de proceso es 0x80925c68.

Para mostrar los detalles completos en un proceso, establezca Flags en 7. El propio proceso se puede especificar estableciendo Process igual que la dirección del proceso, estableciendo Process igual que el identificador de proceso o estableciendo ImageName igual que nombre de la imagen ejecutable. Este es un ejemplo:

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

Tenga en cuenta que la dirección del objeto de proceso se puede usar como entrada para otras extensiones, como !handle, para obtener más información.

En la tabla siguiente se describen algunos de los elementos del ejemplo anterior.

Elemento Significado
WAIT El comentario paréntesis después de este título muestra el motivo de la espera. El comando dt nt!_KWAIT_REASON mostrará una lista de todas las razones de espera.

ElapsedTime

Muestra la cantidad de tiempo transcurrido desde que se creó el proceso. Esto se muestra en unidades de Hours:Minutes:Seconds.Milliseconds.

UserTime

Muestra la cantidad de tiempo que el proceso se ha estado ejecutando en modo de usuario. Si el valor de UserTime es excepcionalmente alto, podría identificar un proceso que agote los recursos del sistema. Las unidades son las mismas que las de ElapsedTime.

KernelTime

Muestra la cantidad de tiempo que el proceso se ha estado ejecutando en modo de kernel Si el valor de KernelTime es excepcionalmente alto, podría identificar un proceso que agote los recursos del sistema. Las unidades son las mismas que las de ElapsedTime.

Tamaño de espacio de trabajo

Enumera el tamaño actual, mínimo y máximo del espacio de trabajo para el proceso, en páginas. Un espacio de trabajo excepcionalmente grande puede ser un signo de un proceso que está filtrando memoria o agotando los recursos del sistema.

Entradas de QuotaPoolUsage

Enumera el grupo paginado y no paginado usado por el proceso. En un sistema con una pérdida de memoria, buscar un uso excesivo del grupo no paginado en todos los procesos puede indicarle qué proceso tiene la pérdida de memoria.

Clonar

Indica si el proceso fue creado por los subsistemas POSIX o Interix.

Privada

Indica el número de páginas privadas (no compartibles) que está usando actualmente el proceso. Esto incluye la memoria paginada y no paginada.

Además de la información de la lista de procesos, la información del subproceso contiene una lista de los recursos en los que el subproceso tiene bloqueos. Esta información aparece en la tercera línea de salida después del título del subproceso. En este ejemplo, el subproceso tiene un bloqueo en un recurso, un SynchronizationEvent con una dirección de 80144fc0. Al comparar esta dirección con la lista de bloqueos mostrados por la extensión !kdext*.locks , puede determinar qué subprocesos tienen bloqueos exclusivos en los recursos.

La extensión !stacks proporciona un breve resumen del estado de cada subproceso. Esto se puede usar en lugar de la extensión !process para obtener una visión general rápida del sistema, especialmente cuando se depuran problemas multiproceso, como conflictos de recursos o interbloqueos.