Programming Field

Taskkill - DOS コマンド一覧

スポンサーリンク

[Windows NT系] コンピューター上で実行されているプロセスを終了させます。

構文

taskkill[.exe] [/S <remote-system> [/U <user-name> [/P [<password>]]]]
  {/FI <filter> | /PID <process-id> | /IM <image-name>}
  [/T] [/F]

※ /FI・/PID・/IM は少なくともどれか1つを指定する必要があり、/PID と /IM は同時に指定することができません。ただし、/PID・/IM はそれぞれ /FI と同時に指定することができます。

/S <remote-system>
プロセスの一覧を取得するコンピューター(ローカル/リモート)の名前を指定します。IPアドレスやホスト名を指定します。省略した場合はローカルコンピューターが対象になります。
なお、リモートコンピューター上のプロセスについては必ず強制的な終了を行います。(/F と同じ)
/U <user-name> [/P [<password>]]
コンピューター名を指定した際のログイン名・パスワードを指定します。<user-name> にはドメイン名を指定することができます(「ドメイン名\ユーザー名」の形式です)。省略した場合はこのコマンドを実行したユーザーが使用されます。
パスワード指定は、「/P [<password>]」全体を省略した場合はパスワードなし、「/P」のみ指定して「<password>」を省略した場合はプロンプトを表示してユーザーにパスワード入力を促すようになります(このプロンプトでは入力されたパスワードが「*」で表示されます)。
/FI <filter>
終了対象となるプロセスを絞ります(フィルター)。指定できる書式は解説をご覧ください。
/FI は複数指定することができます。その場合は AND 検索(すべてのフィルターに一致するもののみを終了)となります。
/IM <image-name>
終了対象となるプロセスをイメージ名で限定します。/IM を指定した場合、ここで指定されたパターンに一致するイメージ名を持つプロセスのみが終了の対象になります。イメージ名は、通常は拡張子を含んだプログラムのファイル名(hoge.exe)です。ワイルドカード「*」も指定できますが、「*」のみを指定する場合は /FI が指定されている必要があり、「*」のみの指定で /FI が指定されていない場合はエラーとなります。
/IM は複数指定することができ、その場合指定した分の <image-name> パターンのいずれかに一致するプロセスが終了対象となります(OR 検索)。
/PID <process-id>
終了対象となるプロセスをプロセスIDで限定します。プロセスIDは各プロセスそれぞれに割り振られた固有の番号で、Tasklistプログラムやタスクマネージャー、各種プロセス監視ツールなどで確認することができます。
プロセスIDは重複しないため、/PID で終了できるプロセスは1つのみですが、/PID は複数指定することができ、その場合指定した分のプロセスが終了対象となります(OR 検索)。
/T
終了対象のプロセスが別のプロセスを実行している場合(子プロセスを持っている場合)、そのプロセスも終了対象とします。
なお、子プロセスが終了される際は、子プロセスに対する /FI (フィルター)のチェックは行われません。そのため、子プロセスの一部のみを終了させる、あるいは子プロセスの一部を終了させない、といったことを /T オプションを用いて行うことはできません。
/F
プロセスを強制終了させます。/F を指定しない場合はプロセスに終了シグナルを送りますが、指定した場合は何もシグナルを送らずに終了させるため、そのプロセスが未保存のデータなどを持っていた場合はそれらが失われることになります。
メインウィンドウを持たないプログラムなど、/F スイッチを指定しないと終了できない場合があります。

解説

Taskkillコマンドでは実行中のプロセス(プログラム)を外から終了させることができます。/F を指定せずにローカルコンピューター上のプロセスを終了させる場合は、プロセスのメインウィンドウに対して終了シグナル(WM_CLOSE メッセージ)を送りますが、/F を指定した場合、あるいはリモートコンピューター上のプロセスに対しては強制的にプロセスを終了させます。

「/FI」スイッチで指定するフィルターは「<name> <op> <value>」の形式で指定します(スペースを含むため全体を「" "」で括ります)。使用できるフィルターは以下の通りです(Tasklistで指定できるフィルターのうち、「SESSIONNAME」を除いて同じものが使用できます)。

フィルター名 <name>使用できる比較演算子 <op>(※)対象
CPUTIMEeq, ne, gt, lt, ge, leCPU時間。<value> は「hh:mm:ss」(時:分:秒、分と秒は1~2桁)の形式で指定します。
IMAGENAMEeq, neプロセス名(イメージ名)。<value> は完全一致の名前か末尾にワイルドカード「*」を含んだ文字列を指定します。(部分一致ではありません。)
MEMUSAGEeq, ne, gt, lt, ge, leメモリ使用量。<value> は数値(KiB単位)を指定します。
MODULESeq, neプロセスが読み込んでいるモジュール名。<value> は完全一致の名前か末尾にワイルドカード「*」を含んだ文字列を指定します。1つのプロセスには複数のモジュールが読み込まれているときがありますが、このフィルターを用いた場合は複数の中から1つでも条件に一致した場合結果に含まれるようになります。
PIDeq, ne, gt, lt, ge, leプロセスID。<value> は数値を指定します。
SERVICESeq, neプロセスが属するサービス名。<value> は完全一致の名前か末尾にワイルドカード「*」を含んだ文字列を指定します。1つのプロセスには複数のサービスが紐づいているときがありますが、このフィルターを用いた場合は複数の中から1つでも条件に一致した場合結果に含まれるようになります。
SESSIONeq, ne, gt, lt, ge, leセッション番号。<value> は数値を指定します。
STATUS(※)eq, neプロセスの状態。<value> は「RUNNING」「NOT RESPONDING」「UNKNOWN」のいずれかを指定します。
USERNAMEeq, neユーザー名。<value> は「[ドメイン名\]ユーザー名」の形式で指定します。「ユーザー名」の部分には末尾にワイルドカード「*」を使うことができます。
WINDOWTITLE(※)eq, neプロセスが持つメインウィンドウのタイトル名。<value> は完全一致の名前か末尾にワイルドカード「*」を含んだ文字列を指定します。

Taskkillが何らかの理由でプロセスを終了できなかった場合(終了シグナルを送れなかった場合; プロセスが見つからなかったなどの場合)は、終了コードが0以外の値になります。If Errorlevelを用い、終了コードが0か否かで条件分岐を行うことができます。

サンプル1

taskkill /IM notepad.exe

イメージ名(プロセス名)が「notepad.exe」に一致するプロセスを終了させます。メモ帳(notepad.exe)がこのコマンドで終了シグナルを受け取った場合、未保存のデータがある場合は保存するかどうかのダイアログを表示します。

サンプル2

taskkill /F /IM notepad.exe

イメージ名(プロセス名)が「notepad.exe」に一致するプロセスを強制的に終了させます。上記と異なり、未保存のデータがある場合でも保存するかどうかのダイアログが表示されません。

サンプル3

taskkill /T /F /FI "username eq %USERNAME%" /IM cmd.exe

現在実行中のユーザー(環境変数「USERNAME」に一致するユーザー)が実行している、イメージ名が「cmd.exe」であるプロセスと、その子プロセスを強制的に終了させます。

サンプル4

taskkill /PID 3456 /PID 3579

プロセスIDが「3456」と「3579」のプロセスそれぞれを終了させます(終了シグナルを送ります)。それぞれの番号が実行中である必要があります。