pgrep.cmd / pkill.cmd ― 2008年09月29日 12時51分41秒
なんちゃってコマンド・番外編
ほんとはもうこの関連やらないつもりだっだんだけど、「FORコマンドで遊んでみる。」のコメント欄で、たけチンさんからリクエストをいただいたのでちょろっとやってみました。やっぱ同一名称のプロセス全殺しの需要があったか。
内容からして、基本は「FORコマンドで遊んでみる。」の「killでメモ帳を全て終了」で例示したコマンドをほぼそのまま使えるのでスクリプト作成なし、バッチファイルのみでやってます。
ただ、リクエストいただいたpgrep、pkillとも普段使ってないコマンドであまり詳しくないので、
最低限はプロセス名称でのgrepができればいいのですが、、、という最低限の実装しかしてません。ご容赦くださいな。 > たけチンさん
pgrep.cmd
まずはプロセスIDを列挙するpgrepから。基本はforコマンドにps+findstrの出力を渡してechoするだけなんだけども、
バッチ プログラムで FOR コマンドを使用するときは、%変数の代わりに、%%変数を使用してください。ってな注意書きがあるので、そのあたりに気をつけてこんな感じ。for /? より抜粋
@echo off for /f "tokens=1" %%p in ( '"ps -a| findstr -i %1"' ) do @echo %%pこの内容を「pgrep.cmd」とか「pgrep.bat」とかでパスが通ったところに保存すればOKです。まぁ、前提としてps.js、ps.cmd、kill.cmdがパスの通ったところに設置済みである必要がありますが。
いちおう以前配布したzipに含めたので、ps.jsとかを設置していない場合はこちらをダウンロードして、こちらのエントリを参考にして設置してみてくださいな。
技術的もは、findstr(というかクォートされたコマンド)にそのまま%1でバッチの引数渡せるか心配だったんだけど、やってみたらすんなり通ったのでこれで完成。
あ、findstrは無条件に -i オプション(ignore case)をつけちゃってます。だってwindowsだし。
pkill.cmd
もうね、さっきのバッチの「@echo」を「@kill」に変えるだけなんですよ。えぇ。
@echo off for /f "tokens=1" %%p in ( '"ps -a| findstr -i %1"' ) do @kill %%p設置の仕方はpgrep.cmdと同じです。当然zipに含めてあります。
試してみる
まず、メモ帳2つと、NOTEPAD++を起動した状態で、ps+findstrで確認。
C:\Documents and Settings\dara-j>ps -a | findstr -i notepad 9564 164 dara-j 4940 4940 0:00:00 notepad.exe 6456 164 dara-j 5048 5048 0:00:00 notepad.exe 8360 888 dara-j 828 17328 0:00:00 notepad++.exe C:\Documents and Settings\dara-j>んでpgrepしてみる。
C:\Documents and Settings\dara-j>pgrep notepad 9564 6456 8360 C:\Documents and Settings\dara-j>うん、3つ表示されますな。
じゃ、今度はメモ帳だけに限定。
C:\Documents and Settings\dara-j>pgrep "notepad.exe" 9564 6456 C:\Documents and Settings\dara-j>うん、ちゃんとnotepad++(PID:8360)が除外されてますな。あ、パターンをクォートするときはダブルクォートにしてください。シングルクォートだとキチンとパターン(バッチ中の「%1」)に渡せないので。
最後にpkillの確認。メモ帳だけ全殺し。
C:\Documents and Settings\dara-j>pkill "notepad.exe" C:\Documents and Settings\dara-j>pgrep "notepad.exe" C:\Documents and Settings\dara-j>pgrep notepad 8360 C:\Documents and Settings\dara-j>はい、notepad++だけは生き残ってます。当然画面上でもメモ帳のウィンドウがばっさり切られたと思います。ちなみに「pkill notepad」にするとnotepad++も殺されます。
関連記事
最近のコメント