labunix's blog

labunixのラボUnix

WindowsXPHomeではtaskkillではなく、PowerShellで「Stop-Process」しよう。

■WindowsXPHomeではtaskkillではなく、PowerShellで「Stop-Process」しよう。
 以下の続編。コマンドプロンプトからpowershellを呼び出して使う。

 WindowsXPHomeではtasklistではなく、PowerShellで「Get-Process」しよう。
 http://labunix.hateblo.jp/entry/20121107/1352292359

■taskkillはまたまた見つからない。

> taskkill /?
'taskkill' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

■メモ帳を起動、停止テストのターゲットとする。

> notepad
> powershell get-process notepad

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     73       4     2492       7760    73     2.84   2400 notepad
     73       4     2516       5924    72     0.31   2412 notepad

■名前でkillすると両方とも閉じてしまう。
 既に起動しているnotepadは止めたくない。

> powershell stop-process -id 2412
> powershell get-process notepad

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     74       4     2512       8768    73     4.77   2400 notepad

■名前で両方ともkillしたい。
 ※プロセスが見つからないとエラーを吐く。
  その仕様はどうかと思うが、見なかったことにするw。

> powershell stop-process -Name notepad
> powershell get-process notepad
Get-Process : 名前 "notepad" のプロセスが見つかりません。プロセス名を確認し、コ
マンドレットを再度呼び出してください。
発生場所 行:1 文字:12
+ get-process <<<<  notepad
    + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process]、P
    rocessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.
   Commands.GetProcessCommand

■Gowに付属するgrep

> grep --version
grep (GNU grep) 2.4.2

Copyright 1988, 1992-1999, 2000 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

> grep ssh-rsa .\putty.log | grep "00000150"
  00000150  00 01 0f 00 00 00 07 73 73 68 2d 72 73 61 00 00  .......ssh-rsa..

■powershellのSelect-Stringsをpsgrepとしてエイリアス。
 Gowと比べて若干遅いが、まあ仕方なし。。。

> powershell
PS> Set-Alias psgrep Select-String
PS> type .\putty.log | psgrep ssh-rsa | psgrep
 "00000150"

  00000150  00 01 0f 00 00 00 07 73 73 68 2d 72 73 61 00 00  .......ssh-rsa..
PS> exit

■プロセスの取得には期待した結果が得られない。

> powershell
PS> Set-Alias psgrep Select-String
PS> get-process | psgrep notepad

System.Diagnostics.Process (notepad)

■Gowならば得られる。

> get-process | grep notepad
     74       4     2724       8816    73     6.84   1480 notepad

■ところで、powershellのfindはコマンドプロンプト上とは動作が異なる。

PS> get-process | find "notepad"
FIND: パラメータの書式が違います
PS> exit

■そういう時もpowershellを呼び出し形式にすると上手く行く。
 パイプの先はコマンドプロンプトのfind。

> powershell get-process | find "notepad"
     74       4     2536       9484    73     9.92   1480 notepad