52 votes

Trouver l'ID du processus parent sous Windows

Problème

Étant donné l'ID d'un processus et l'accès à la ligne de commande sur un hôte Windows distant, comment pouvez-vous trouver le PID de son parent ?

Solution

Étant donné la réponse de Marc B, nous pouvons utiliser WMIC (échantillons de commande) aquí ) et faire quelque chose comme ça :

wmic process where (processid=PROCID_HERE) get parentprocessid

1 votes

Si vos chemins sont en désordre (comme moi), vous apprécierez de savoir que le wmic.exe se trouve dans " C:\Windows\System32\wbem "

0 votes

Il convient de noter que les identifiants de processus sont réutilisés, de sorte que si le parent d'un processus s'est éteint, vous pouvez identifier à tort un processus non lié comme étant le parent. (Je suppose que vous pourriez détecter cela en comparant les temps d'exécution des deux processus).

68voto

Marc B Points 195501
C:\> wmic process get processid,parentprocessid,executablepath|find "process id goes here"

1 votes

Vous êtes génial, merci. Corrigez-moi si je me trompe, mais cette fonction renvoie son parent sur la première ligne de la LHS et elle-même sur la RHS. Ensuite, si c'est un parent lui-même, il montrera plus de processus avec lui-même sur LHS et les enfants sur RHS.

0 votes

Il devrait renvoyer les éléments au format colonne, dans l'ordre où vous les avez spécifiés sur la ligne de commande. Vous pouvez enlever le bit executablepath pour le réduire aux numéros pid/ppid, ce qui le rend beaucoup plus compact.

0 votes

Hey Marc, j'ai joué un peu avec, il n'adhère pas à la manière dont vous les avez spécifiés sur la ligne de commande. get parentprocessid, processid & get processid, parentprocessid les deux sortent ParentProcessId à gauche et processid à droite.

8voto

robinst Points 9249

Sur la base de La solution de joslinm dans la question Voici un exemple d'utilisation dans un script de lot script :

set PID=<this is the child process ID>
for /f "usebackq tokens=2 delims==" %%a in (`wmic process where ^(processid^=%PID%^) get parentprocessid /value`) do (
    set PARENT_PID=%%a
)

7voto

uffe hellum Points 19

Dans powershell :

PS> wmic process  where '(processid=4632)' get 'processid,parentprocessid,executablepath'
ExecutablePath                                              ParentProcessId  ProcessId
C:\Program Files\Docker\Docker\Resources\com.docker.db.exe  4488             4632

2voto

knil4_crack Points 68

Ou vous pouvez faire quelque chose comme ça dans PowerShell :

Get-CimInstance -className win32_process | where-object {$_.ProcessId -eq processId_goes_here } | select ParentProcessId, Name

vous pouvez également filtrer par nom en substituant simplement $_.ProcessId con $_.Name propriété

0 votes

Toutes les autres réponses sont dépréciées dans Windows 11 Insider Preview 22494.1000 WMIC est supprimé, donc merci pour cette réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X