web-dev-qa-db-ja.com

プロセスIDでプロセス名を見つける

プロセスIDがわかっているとします。 Windowsバッチスクリプトを使用して、IDでプロセス名を見つけたい。これどうやってするの?

54
Oz Molaim

基本的なものは、タスクリストに出力をフィルタリングし、指定されたプロセスID情報のみを表示するように依頼します

tasklist /fi "pid eq 4444" 

プロセス名のみを取得するには、行を分割する必要があります

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

この場合、プロセスのリストはcsv形式(/nh)のヘッダー(/fo:csv)なしで取得されます。カンマはトークンの区切り文字として使用され、行の最初のトークンはイメージ名です

:一部のWindowsバージョン(私の場合は、スペイン語Windows XPバージョンです)では、タスクリストのpidフィルターが機能しません。この場合、プロセスのリストに対するフィルターはコマンドから実行する必要があります

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

これにより、タスクリストが生成され、csv出力の2番目の列でプロセスIDを検索してフィルタリングされます。

編集済み:あるいは、OSをスペイン語に翻訳したチームによって作成されたものを想定できます。他のロケールで何が起こるかわかりません。

tasklist /fi "idp eq 4444" 
69
MC ND

「ネイティブ」のWindowsユーティリティのみを使用して、次を試してください。「516」は、イメージ名に使用するプロセスIDです。

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 )

または、wmic(Windows Management Instrumentationコマンドラインツール)を使用して、実行可能ファイルへのフルパスを取得できます。

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

または、Microsoft PsTools をダウンロードするか、pslistユーティリティのみをダウンロードして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

...状況に合わせてPIDを設定します。

2
Magoo