!process

L'extension !process affiche des informations sur le processus spécifié ou sur tous les processus, y compris le bloc EPROCESS.

Cette extension peut être utilisée uniquement lors du débogage en mode noyau.

Syntaxe

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

Paramètres

/s **** Session
Spécifie la session qui possède le processus souhaité.

/m **** Module
Spécifie le module qui possède le processus désiré.

Processus
Spécifie l'adresse hexadécimale ou l'ID du processus sur l'ordinateur cible.

La valeur de Process détermine si l'extension !process affiche l'adresse ou l'ID du processus. Si Process est omis dans n'importe quelle version de Windows, le débogueur n'affiche que les données relatives au processus système en cours. Si Process vaut 0 et que ImageName est omis, le débogueur affiche des informations sur tous les processus actifs. Si -1 est spécifié pour Process, des informations sur le processus en cours sont affichées.

Indicateurs
Spécifie le niveau de détails à afficher. Flags peut être n’importe quelle combinaison des bits suivants. Si Flags a la valeur 0, seule une quantité minimale d’informations est affichée. La valeur par défaut varie en fonction de la version de Windows et de la valeur de Process. La valeur par défaut est 0x3 si Process est omis ou si Process est 0 ou -1 ; sinon, la valeur par défaut est 0xF.

Bit 0 (0x1)
Affiche les statistiques de temps et de priorité.

Bit 1 (0x2)
Affiche une liste de threads et d'événements associés au processus, ainsi que leurs états d'attente.

Bit 2 (0x4)
Affiche la liste des threads associés au processus. Si cette option est incluse sans le bit 1 (0x2), chaque threading est affiché sur une seule ligne. S'il est inclus avec le bit 1, chaque threading est affiché avec une trace de pile.

Bit 3 (0x8)
Affiche l'adresse de retour et le pointeur de pile pour chaque fonction L'affichage des arguments de fonction est supprimé.

Bit 4 (0x10)
Définit le contexte du processus comme étant le processus spécifié pour la durée de cette commande. Il en résulte un affichage plus précis des piles de threading. Comme cet indicateur équivaut à l'utilisation de .process /p /r pour le processus spécifié, toute liste de modules en mode utilisateur sera supprimée. Si Process vaut zéro, le débogueur affiche tous les processus et le contexte du processus est modifié pour chacun d'entre eux. Si vous n'affichez qu'un seul processus et que son état en mode utilisateur a déjà été actualisé (par exemple, avec .process /p /r), il n'est pas nécessaire d'utiliser cet indicateur. Cet indicateur n'est efficace que lorsqu'il est utilisé avec le bit 0 (0x1).

ImageName
Spécifie le nom du processus à afficher. Le débogueur affiche tous les processus dont les noms d'images exécutables correspondent à ImageName. Le nom de l’image doit correspondre à celui du bloc EPROCESS. En général, il s’agit du nom exécutable qui a été invoqué pour démarrer le processus, y compris l’extension de fichier (généralement .exe), et tronqué après le quinzième caractère. Il est impossible de spécifier un nom d’image contenant un espace. Lorsque ImageName est spécifié, Process doit être égal à zéro.

DLL

Kdexts.dll

Informations supplémentaires

Pour plus d'informations sur les processus en mode noyau, reportez-vous à la section Changement de contexte. Pour plus d’informations sur l’analyse des processus et des threads, veuillez consulter Microsoft Windows Internals (Au cœur de Windows) de Mark Russinovich et David Solomon.

Notes

Voici un exemple d'affichage 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

Le tableau suivant décrit certains éléments de la sortie !process 0 0.

Élément Signification

Adresse du processus

Le nombre hexadécimal de huit caractères qui suit le mot PROCESS est l'adresse du bloc EPROCESS. Dans la dernière entrée de l'exemple précédent, l'adresse du processus est 0x809258E0.

ID du processus (PID)

Le nombre hexadécimal après le mot Cid. Dans la dernière entrée de l'exemple précédent, le PID est 0x44, ou 68 en décimal.

Bloc d'environnement du processus (PEB)

Le nombre hexadécimal suivant le mot Peb est l'adresse du bloc d'environnement de processus. Dans la dernière entrée de l'exemple précédent, le PEB est situé à l'adresse 0x7FFDE000.

PID du processus parent

Le nombre hexadécimal qui suit le mot ParentCid est le PID du processus parent. Dans la dernière entrée de l'exemple précédent, le PID du processus parent est 0x26, ou 38 en décimal.

Image

Le nom du module propriétaire du processus. Dans la dernière entrée de l'exemple précédent, le propriétaire est spoolss.exe. Dans la première entrée, le propriétaire est le système d'exploitation lui-même.

Adresse de l'objet du processus

Le nombre hexadécimal après le mot ObjectTable. Dans la dernière entrée de l'exemple précédent, l'adresse de l'objet du processus est 0x80925c68.

Pour afficher tous les détails d'un processus, réglez les indicateurs sur 7. Le processus lui-même peut être spécifié en définissant Process égal à l'adresse du processus, Process égal à l'ID du processus ou ImageName égal au nom de l'image exécutable. Voici un exemple :

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

Notez que l'adresse de l'objet processus peut être utilisée comme entrée pour d'autres extensions, telles que !handle, afin d'obtenir des informations supplémentaires.

Le tableau suivant décrit certains des éléments de l'exemple précédent.

Élément Signification
WAIT Le commentaire parenthétique qui suit ce titre donne la raison de l'attente. La commande dt nt!_KWAIT_REASON affiche une liste de toutes les raisons de l'attente.

ElapsedTime

Indique le temps écoulé depuis la création du processus. Ce temps est affiché en unités Heures:Minutes:Secondes.Millisecondes.

UserTime

Indique la durée d'exécution du processus en mode utilisateur. Si la valeur de UserTime est exceptionnellement élevée, elle peut identifier un processus qui épuise les ressources du système. Les unités sont les mêmes que pour ElapsedTime.

KernelTime

Indique la durée d'exécution du processus en mode noyau. Si la valeur de KernelTime est exceptionnellement élevée, cela peut indiquer que le processus épuise les ressources du système. Les unités sont les mêmes que pour ElapsedTime.

Tailles des ensembles de travail

Répertorie la taille actuelle, minimale et maximale du jeu de travail du processus, en pages. Une taille de jeu de travail exceptionnellement élevée peut être le signe d'un processus qui fuit la mémoire ou épuise les ressources du système.

Entrées QuotaPoolUsage

Répertorie le pool paginé et non paginé utilisé par le processus. Sur un système présentant une fuite de mémoire, la recherche d'une utilisation excessive du pool non paginé par tous les processus peut vous indiquer le processus à l'origine de la fuite de mémoire.

Cloner

Indique si le processus a été créé par les sous-systèmes POSIX ou Interix.

Privée

Indique le nombre de pages privées (non partageables) actuellement utilisées par le processus. Cela inclut la mémoire paginée à l'intérieur et la mémoire paginée à l'extérieur.

Outre les informations relatives à la liste des processus, les informations relatives au threading contiennent une liste des ressources sur lesquelles le threading a des verrous. Ces informations figurent sur la troisième ligne de sortie après l'en-tête du threading. Dans cet exemple, le threading a un verrou sur une ressource, un SynchronizationEvent dont l'adresse est 80144fc0. En comparant cette adresse à la liste des verrous affichée par l'extension !kdext*.locks, vous pouvez déterminer quels threads ont des verrous exclusifs sur les ressources.

L'extension !stacks donne un bref résumé de l'état de chaque threading. Elle peut être utilisée à la place de l'extension !process pour obtenir une vue d'ensemble rapide du système, en particulier lors du débogage de problèmes multithreads, tels que des conflits de ressources ou des blocages.