プロセス名でgrepして、プロセスを殺す

UNIXでも結構ありそうなシチュエーション。

UNIXだと、

 > ps aux | grep mokemoke

なり

 > ps -ef | grep mokemoke

してプロセスIDを調べてから

> kill 000

とする*1

PowerShellだとこうする

 PS C:\> Get-Process -name notepad
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     69       6     7904      12804   115     0.11   4232 notepad

としてプロセスIDを調べてから

 PS C:\> Stop-Process -id 4232
 PS C:\> 

として殺す。ここではエディタのnotepad.exeに犠牲になってもらった。このとき、Get-Processの-nameプロセスでは、完全一致でないとうまくいかない。もし、プロセス名の一部しかわからない場合には、以下のようにする。

PS C:\> Get-Process | Where-Object {$_.Name -like "no*"}

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     54       3     2568       6092    40     0.13   5204 notepad
     88       3      880       3032    29     0.02   3616 NotiMan

さらにstop-processでは一点、注意が必要になる。stop-processによるプロセスの終了は、本当に問答無用らしく*2、エディタでの編集中、つまりダイアログさえでない。ふつーにシャットダウンの場合でも、「保存する?」と聞いてくることを思い出すと、結構容赦なし。

*1:あくまで例示で、0のプロセスはunixだとinitんわけで...

*2:UNIXでいうところのkill -9に近い