web-dev-qa-db-fra.com

Rechercher le nom du processus par son ID de processus

Supposons que je connaisse l'identifiant du processus. Je veux trouver le nom du processus par son ID, en utilisant le script batch de Windows. Comment puis-je faire ceci?

54
Oz Molaim

La base, demandez à la liste de tâches de filtrer sa sortie et d’afficher uniquement les informations d’identification de processus indiquées

tasklist /fi "pid eq 4444" 

Pour obtenir uniquement le nom du processus, la ligne doit être scindée

for /f "delims=," %%a in ('
    tasklist /fi "pid eq 4444" /nh /fo:csv
') do echo %%~a

Dans ce cas, la liste des processus est récupérée sans en-tête (/nh) au format csv (/fo:csv). Les virgules sont utilisées comme délimiteurs de jetons et le premier jeton de la ligne est le nom de l'image.

note: Dans certaines versions de Windows (l'une d'elles, mon cas, est la version espagnole de Windows xp), le filtre pid de la liste des tâches ne fonctionne pas. Dans ce cas, le filtre sur la liste des processus doit être effectué en dehors de la commande.

for /f "delims=," %%a in ('
    tasklist /fo:csv /nh ^| findstr /b /r /c:"[^,]*,\"4444\","
') do echo %%~a

Cela va générer la liste des tâches et la filtrer en recherchant l'ID de processus dans la deuxième colonne de la sortie csv.

édité: vous pouvez également supposer ce qui a été fait par l'équipe qui a traduit le système d'exploitation en espagnol. Je ne sais pas ce qui peut arriver dans d'autres endroits.

tasklist /fi "idp eq 4444" 
69
MC ND

En utilisant uniquement les utilitaires Windows "natifs", essayez ce qui suit, où "516" correspond à l'ID de processus pour lequel vous souhaitez attribuer un nom à l'image:

for /f "delims=," %a in ( 'tasklist /fi "PID eq 516" /nh /fo:csv' ) do ( echo %~a )
for /f %a in ( 'tasklist /fi "PID eq 516" ^| findstr "516"' ) do ( echo %a )

Ou vous pouvez utiliser wmic (l'outil de ligne de commande Windows Management Instrumentation) et obtenir le chemin d'accès complet à l'exécutable:

wmic process where processId=516 get name
wmic process where processId=516 get ExecutablePath

Ou vous pouvez télécharger Microsoft PsTools , ou télécharger uniquement l'utilitaire pslist et utiliser PsList:

for /f %a in ( 'pslist 516 ^| findstr "516"' ) do ( echo %a )
4
Craig
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a pid=1600
FOR /f "skip=3delims=" %%a IN ('tasklist') DO (
 SET "found=%%a"
 SET /a foundpid=!found:~26,8!
 IF %pid%==!foundpid! echo found %pid%=!found:~0,24%!
)

GOTO :EOF

... configurez le PID en fonction de votre situation.

2
Magoo