LinuxのpsコマンドみたいなWindowsのコマンド
WindowにもLinuxのpsコマンドみたいなのがあった。「tasklist」コマンドという。ぜんぜん知らなかった。
C:\WINDOWS\system32>tasklist イメージ名 PID セッション名 セッション# メモリ使用量 ========================= ====== ================ ======== ============ System Idle Process 0 Console 0 28 K System 4 Console 0 264 K ・・・略
Windowsでバッチプログラムとか作るときに使えそうだね。条件を指定して一覧を出すことも出来る。
C:\WINDOWS\system32>tasklist /fi "imagename eq postgres.exe" イメージ名 PID セッション名 セッション# メモリ使用量 ========================= ====== ================ ======== ============ postgres.exe 1264 Console 0 5,616 K postgres.exe 1616 Console 0 3,328 K postgres.exe 572 Console 0 3,716 K postgres.exe 832 Console 0 3,772 K
/fiはフィルターをかけるという意味。その後ろにあるのが条件(フィルター)。「imagename eq postgres.exe」で、イメージ名が「postgres.exe」と一致するものを抽出する。他にもフィルターとして使えるのは、たくさんあるので、tasklist/?で確認。
C:\WINDOWS\system32>tasklist/? TASKLIST [/S システム [/U ユーザー名 [/P [パスワード]]]] [/M [モジュール] | /SVC | /V] [/FI フィルタ] [/FO 形式] [/NH] 説明: このコマンド ライン ツールによってローカルまたはリモートのシステム で実行されているアプリケーションと関連付けられたタスクまたはプロセスの 一覧が表示されます。 パラメータ一覧: /S システム 接続するリモート システムを指定します。 /U [ドメイン\]ユーザー コマンドを実行するユーザー コンテキストを 指定します。 /P [パスワード] 提供されたユーザー コンテキストのパスワードを 指定します。省略された場合は、入力を要求します。 /M [モジュール] 指定されたパターン名に一致する DLL モジュールを 読み込んだすべてのタスクの一覧を表示します。モ ジュール名が指定されない場合、それぞれのタスクに よって読み込まれたすべてのモジュールを表示します。 /SVC それぞれのプロセスのサービスを表示します。 /V 詳細な情報を表示するように指定します。 /FI フィルタ フィルタによって指定された、与えられた条件に一致 するタスクを表示します。 /FO 形式 出力の形式を指定します。 有効な値: "TABLE", "LIST", "CSV"。 /NH 出力するときに、"カラム ヘッダー"を 表示しないように指定します。 "TABLE" と "CSV" のみ有効です。 /? ヘルプまたは使用法を表示します。 フィルタ: フィルタ名 有効な演算子 有効な値 ----------- --------------- -------------- STATUS eq, ne RUNNING | NOT RESPONDING IMAGENAME eq, ne イメージ名 PID eq, ne, gt, lt, ge, le PID 値 SESSION eq, ne, gt, lt, ge, le セッション番号 SESSIONNAME eq, ne セッション名 CPUTIME eq, ne, gt, lt, ge, le hh:mm:ss の形式の CPU 時間です。 hh は、時間、 mm は 分、ss は、秒です。 MEMUSAGE eq, ne, gt, lt, ge, le メモリ使用 (KB) USERNAME eq, ne [ドメイン\]ユーザーの形式の ユーザー名です。 SERVICES eq, ne サービス名 WINDOWTITLE eq, ne ウィンドウ タイトル MODULES eq, ne DLL 名 例: TASKLIST TASKLIST /M TASKLIST /V TASKLIST /SVC TASKLIST /M wbem* TASKLIST /S システム /FO LIST TASKLIST /S システム /U ドメイン\ユーザー名 /FO CSV /NH TASKLIST /S システム /U ユーザー名 /P パスワード /FO TABLE /NH TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"
なんと、CSV形式でも表示できる。
C:\WINDOWS\system32>tasklist /fi "imagename eq postgres.exe" /fo csv "イメージ名","PID","セッション名","セッション#","メモリ使用量" "postgres.exe","1264","Console","0","5,616 K" "postgres.exe","1616","Console","0","3,328 K" "postgres.exe","572","Console","0","3,716 K" "postgres.exe","832","Console","0","3,772 K"
findコマンドと組み合わせて、指定したプロセスがいくつあがってるか調べるには下のようにする。(findでカンマがあった行をカウントするって結構微妙かもしれないけど)因みに「/nh」オプションでヘッダを出力しないようにする。
C:\WINDOWS\system32>tasklist /fi "imagename eq postgres.exe" /fo csv /nh |find "," /c 4
tasklistのほかにもwmicってコマンドでもプロセスが見れる。こっちのほうが高機能かもね。こんな感じ。ふーん。
C:\WINDOWS\system32>wmic process where "name = \"postgres.exe\"" get name,commandline CommandLine Name "C:/Program Files/PostgreSQL/8.2/bin/postgres.exe" -D "C:/Program Files/PostgreSQL/8.2/data" postgres.exe "C:/Program Files/PostgreSQL/8.2/bin/postgres.exe" "--forklog" "1484" "1488" postgres.exe "C:/Program Files/PostgreSQL/8.2/bin/postgres.exe" "--forkboot" "1456" "-x3" "-y" "template1" postgres.exe "C:/Program Files/PostgreSQL/8.2/bin/postgres.exe" "--forkcol" "1480" postgres.exe