tasklistは、Windowsで現在存在するプロセスをコマンドラインから一覧表示するためのコマンドです。アプリの名前やPIDを調べる、メモリ使用量で絞り込む、調査時の一覧をCSVに保存するといった用途に使えます。プロセスを終了するコマンドではありません。
この記事では、コマンドプロンプト(cmd.exe)で使う基本操作、フィルター、ファイル保存、回数を限定した記録用バッチを解説します。全プロセスの一覧と「RUNNING」状態の抽出は別であり、メモリ欄もPC全体の使用量ではない点に注意してください。
tasklistの基本と出力の見方
スタートメニューで「cmd」を検索し、コマンドプロンプトを開きます。まずは通常の権限で実行し、取得できない情報がある場合に権限や対象を確認してください。Windows Terminalを使う場合も、以下の保存例やバッチの操作には「コマンドプロンプト」のタブを使います。
tasklist実行時点の一覧を一度表示します。自動更新される画面ではないため、変化を確認したい場合は再実行します。既定の表形式には、主に次の列があります。表示言語によって見出しは変わります。
- イメージ名(Image Name):
notepad.exeなどの実行ファイル名。同じ名前のプロセスが複数並ぶこともあります。 - PID:その時点でプロセスを識別する番号。記事中の番号をそのまま使わず、自分の一覧で確認します。
- セッション名/セッション番号:プロセスが属するセッションの情報。名前と番号は別の値です。
- メモリ使用量(Mem Usage):各プロセスについて表示されるメモリの値。アプリ全体やPC全体の使用量と同一ではありません。
対応するオプションやフィルターを確認するには、実行するPC上のヘルプを参照します。
tasklist /?/FIで必要なプロセスだけを表示する
条件は/FI "項目 演算子 値"の形で指定します。数値を比較する主な演算子は、eq(等しい)、ne(等しくない)、gt(より大きい)、ge(以上)、lt(より小さい)、le(以下)です。項目ごとに使える演算子は異なります。
名前やPIDで探す
tasklist /FI "IMAGENAME eq notepad.exe"
tasklist /FI "PID eq 1234"1行目は名前が一致するプロセス、2行目はPIDが一致するプロセスを探します。1234は置き換え用の例です。対象がない場合は、該当するタスクがない旨のメッセージになることがあります。名前で見つからないときは、先にtasklistだけを実行し、実際のイメージ名を確認してください。
メモリ使用量で絞り込む
50,000 KBを超えるプロセスを表示する場合はgtを使います。値には桁区切りのカンマや単位を付けません。
tasklist /FI "MEMUSAGE gt 50000"50,000 KBちょうどを含む「50,000 KB以上」なら、geです。
tasklist /FI "MEMUSAGE ge 50000"この条件はプロセスごとの値に対して適用されます。たとえば、1つのアプリが複数のプロセスに分かれている場合、アプリ全体の合計が50,000 KBを超えていても、各プロセスが条件に届かなければ表示されません。この結果からシステム全体のメモリ不足を判定しないでください。
状態で絞り込む:RUNNINGは「全プロセス」ではない
tasklist /V /FI "STATUS eq RUNNING"
tasklist /V /FI "STATUS eq NOT RESPONDING"STATUSにはRUNNING、NOT RESPONDING、UNKNOWNがあります。STATUS eq RUNNINGを付けると、ほかの状態のプロセスは対象から外れます。応答しないものも含めて一覧を確認したいときは、状態フィルターを付けずにtasklistまたはtasklist /Vを使います。
RUNNINGだけでアプリの機能が正常だと保証できるわけではありません。また、STATUSとWINDOWTITLEのフィルターは、/SでリモートPCを指定する場合には対応していません。
セッション番号で絞り込む
tasklist /FI "SESSION eq 1"SESSIONにはセッション番号を指定します。上の1は例なので、一覧のセッション番号を確認して置き換えてください。「Consoleは必ず1」のように固定して考えないことが大切です。
なお、現在のMicrosoft Learnのフィルター表には、セッション名を指定するSESSIONNAME(eq/ne)も記載されています。ただし、本記事ではWindowsの各ビルドでの動作までは検証していません。SESSIONNAMEを使う際は、そのPCのtasklist /?と実行結果を確認してください。受け付けられない環境では、一覧で対応する番号を調べ、SESSIONで絞り込みます。
複数の条件を組み合わせる
/FIを繰り返すと、指定した条件をすべて満たすプロセスに絞り込めます。次の例は、notepad.exeのうち、メモリ使用量が50,000 KB以上のものを表示します。
tasklist /FI "IMAGENAME eq notepad.exe" /FI "MEMUSAGE ge 50000"条件を増やして結果がなくなった場合は、1つずつ外して確認します。「該当なし」と「取得エラー」は同じではありません。エラーメッセージを捨てて、対象が停止したと決めつけないようにしましょう。
詳細情報・サービス・DLLを調べる
/V:状態、ユーザー名、CPU時間、ウィンドウタイトルなどの詳細情報を表示します。CPU時間はCPU使用率(%)とは別の値です。/SVC:プロセスに対応するサービス情報を表示します。公式仕様では表形式(/FO TABLE)で使用します。/M:読み込まれたDLLモジュールを調べます。モジュール名を指定すると、その条件で絞り込めます。
tasklist /V /FI "IMAGENAME eq notepad.exe" /FO LIST
tasklist /SVC /FI "IMAGENAME eq svchost.exe" /FO TABLE
tasklist /M ntdll.dllユーザー名やウィンドウタイトルには、個人名や開いている文書の情報が含まれる可能性があります。詳細出力を社外に送る場合や公開する場合は、内容を確認して不要な情報を伏せてください。
出力形式を変えてファイルに保存する
TABLE・LIST・CSVの使い分け
/FO TABLE:表形式。既定の表示です。/FO LIST:項目を縦に並べる形式。個々のプロセスの詳細を読むときに便利です。/FO CSV:CSV形式。表計算ソフトなどに取り込む場合に使います。/NH:見出しを非表示にします。TABLEまたはCSVに限って使用でき、LISTとは組み合わせません。
tasklist /FO CSV
tasklist /FO CSV /NH人が後から読むファイルには、通常は見出しを残したほうが列の意味を確認しやすくなります。/NHは見出しが不要な処理に限って付けます。
テキスト・CSVへの保存
コマンドプロンプトでは、>で出力をファイルに保存できます。以下はカレントフォルダーに保存する例です。同名のファイルが存在すると上書きされるため、必要に応じて別名や保存先を指定してください。
tasklist > "tasklist_output.txt"
tasklist /FO CSV > "tasklist_output.csv"
tasklist /FI "IMAGENAME eq cmd.exe" > "cmd_process.txt"エラーも調べられるように保存したい場合は、標準出力と標準エラーを別ファイルにします。エラーを同じCSVへ混ぜると、後処理で扱いにくくなります。
tasklist /FO CSV > "tasklist_output.csv" 2> "tasklist_errors.txt"保存後はファイルを開き、一覧を取得できていることを確認してください。CSVを取り込む際は、区切り文字、引用符、文字コードを確認します。日本語が文字化けする場合は、取り込み側の文字コード設定を確認してください。
CSVをFOR /Fの「5番目の値」で処理しない
for /f "tokens=5"はCSVの5列目を読み取る指定ではありません。FOR /Fの既定の区切りは空白とタブで、CSVの引用符を解釈するパーサーではないためです。単純にdelims=,を追加しても、メモリ欄の"50,000 K"のような引用符付きのカンマを正しく扱えません。
メモリのしきい値で抽出するだけなら、自分でCSVを分解せず/FI "MEMUSAGE ge 50000"などを使います。集計が必要なら、CSV対応の読み込み機能や、PowerShellのプロセスオブジェクトなど、目的に合った方法を選びます。該当なしの案内や取得エラーはCSVデータではないため、機械処理ではそれらも区別する必要があります。
安全に試す:6回だけプロセス一覧を記録する
無限ループでログを取り続けるのではなく、まずは回数を限定して試します。次の例は、取得後に10秒待つ処理を挟みながら、最大6回の一覧を保存します。待ち時間の合計は50秒で、実際の所要時間には各回の取得時間が加わります。
書き込み可能な自分用のフォルダーに、次の内容をcapture_tasklist.batとして保存し、コマンドプロンプトから実行してください。バッチ内では%%Nを使います。1行ずつそのままコマンドプロンプトに貼り付けるための例ではありません。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "logdir=%~dp0tasklist_logs"
if exist "%logdir%" (
echo Log folder already exists. Use a new folder name.
exit /b 1
)
mkdir "%logdir%"
if errorlevel 1 exit /b 1
for /L %%N in (1,1,6) do (
tasklist /FO CSV > "%logdir%\snapshot_%%N.csv" 2> "%logdir%\error_%%N.txt"
if errorlevel 1 (
echo Capture failed. Check error_%%N.txt.
exit /b 1
)
if %%N LSS 6 (
timeout /T 10 /NOBREAK > NUL
if errorlevel 1 exit /b 1
)
)
echo Capture finished.
endlocal- バッチと同じ場所に
tasklist_logsを作り、snapshot_1.csvから順番に記録します。既存の保存先がある場合は、過去のログを上書きしないよう開始せず終了します。 - 再実行する場合は、前回のフォルダーを別名で保管するか、
logdirのフォルダー名を変更します。同じ保存先で並行実行しないでください。 - 取得や待機でエラーが返った場合は途中で終了します。保存済みのファイルは残るため、CSVと対応するエラーファイルを確認します。
/NOBREAKは通常のキー入力で待ち時間が短縮されることを防ぎます。途中で止めたいときはCtrl+Cを押し、終了確認が出た場合は画面の案内に従います。
この例では日付文字列を切り出してファイル名を作りません。%DATE%や%TIME%の表示位置を決め打ちする方法は、地域設定や時刻の桁数に影響されるためです。まずは連番で安全に保存し、日時付きのファイル名が必要な場合は、PowerShellなどで書式を明示して生成する構成を検討してください。
特定プロセスだけを記録したい場合は、バッチ内のtasklist /FO CSVの部分を次のように変更できます。ただし、対象がない回の出力はCSV形式の一覧ではなく、案内メッセージになることがあります。
tasklist /FI "IMAGENAME eq notepad.exe" /FO CSVメモリ条件だけを記録する場合も同様です。これは各プロセスのメモリ使用量の記録であり、PC全体のメモリ使用率を監視するスクリプトではありません。
tasklist /FI "MEMUSAGE ge 50000" /FO CSV定期取得は、その瞬間の状態を残す方法です。取得と取得の間に短時間だけ起動・終了したプロセスは見逃します。また、一覧から消えたことだけでは終了理由は分かりません。継続的な障害調査では、必要に応じてアプリのログやイベントログなども確認してください。
よくある疑問と注意点
- 見たいアプリがない:実際のイメージ名と条件を確認し、いったんフィルターなしで実行します。表示名と実行ファイル名が一致するとは限りません。
- フィルターでエラーになる:二重引用符、項目名、演算子、数値を確認します。対応状況は実行環境の
tasklist /?でも確認してください。 - 情報が取得できない:エラーメッセージを残し、対象PC、実行権限、リモート接続の可否などを切り分けます。とりあえず権限を引き上げたり、セキュリティ設定を緩めたりする方法は勧めません。
- メモリ値を合計してもPC全体と合わない:プロセスごとの表示値とシステム全体の指標は別です。共有されるメモリなどもあるため、単純合計をPC全体の使用量として扱わないでください。
- 高メモリのプロセスを見つけた:大きい値だけで異常とは判断できません。作業内容や時間による変化を調べ、安易にプロセスを終了しないでください。
演習問題と解答例
演習1:全体の一覧を確認する
問題:状態フィルターを付けずに一覧を表示し、イメージ名、PID、セッション番号を確認してください。
tasklist演習2:「以上」と「超える」を使い分ける
問題:メモリ使用量が50,000 KB以上のプロセスと、50,000 KBを超えるプロセスをそれぞれ表示してください。
tasklist /FI "MEMUSAGE ge 50000"
tasklist /FI "MEMUSAGE gt 50000"50,000 KBちょうどのプロセスがなければ、同じ結果になることもあります。違いは境界値を含むかどうかです。
演習3:名前で絞り込み、結果を保存する
問題:cmd.exeの一覧をcmd_process.txtに保存してください。同名ファイルの上書きに注意します。
tasklist /FI "IMAGENAME eq cmd.exe" > "cmd_process.txt"演習4:見出し付きCSVとして保存する
問題:状態を限定せずに一覧を取得し、見出しを残してprocess_list.csvに保存してください。
tasklist /FO CSV > "process_list.csv"演習5:記録する回数を変更する
問題:前述のバッチを、3回取得して終了する形に変更してください。保存先は前回と別の名前にします。
解答:for /L %%N in (1,1,6)をfor /L %%N in (1,1,3)へ変更し、if %%N LSS 6もif %%N LSS 3へ変更します。最後の取得後には待機しません。
まとめ
tasklistは、プロセスの一覧、条件による絞り込み、調査用の保存に便利です。まずはフィルターなしで全体を確認し、名前やPID、メモリ使用量などで対象を絞りましょう。RUNNINGと全プロセス、gtとge、プロセス単位とシステム全体のメモリを区別すると、出力を誤読しにくくなります。
記録を自動化するときは、回数を限定する、エラーを確認する、既存ファイルを不用意に上書きしない、という基本から始めてください。



コメント