Windows の PowerShell で Linux の ps ax | grep hoge みたいなことをする方法
Windows で バックグラウンドで動くアプリ作ってたんですね。
んで、案の定バグでゾンビ化したわけですけど、そいつがポートつかんだまんまだから同じポート使ってアプリが起動できなくなったんですね。
Linuxとかならpsでプロセス探してkillしちゃえばいいじゃないですか。
だから僕やってみたんですね、tasklist。
そしたら、
PS > tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 156 K
Secure System 72 Services 0 73,112 K
Registry 132 Services 0 93,000 K
smss.exe 492 Services 0 1,128 K
csrss.exe 764 Services 0 5,116 K
wininit.exe 848 Services 0 6,084 K
csrss.exe 860 Console 1 7,380 K
services.exe 952 Services 0 11,540 K
LsaIso.exe 976 Services 0 3,488 K
lsass.exe 984 Services 0 54,224 K
svchost.exe 768 Services 0 69,192 K
fontdrvhost.exe 992 Services 0 3,928 K
winlogon.exe 1044 Console 1 12,656 K
WUDFHost.exe 1080 Services 0 9,676 K
fontdrvhost.exe 1148 Console 1 16,444 K
WUDFHost.exe 1224 Services 0 21,988 K
svchost.exe 1244 Services 0 40,608 K
svchost.exe 1316 Services 0 18,668 K
dwm.exe 1380 Console 1 166,412 K
WUDFHost.exe 1488 Services 0 8,068 K
...
・・・。
これ、exeしかでてけぇへん。
コマンドラインまで出さんかい!どうやって区別すんねん!
とキレ散らかしてもどうしようもないので調べた。どうせオプションとかで何とかなるんじゃろうと。
・・・。
ない。tasklistにいい感じのオプションない。
頭おかしいんか、Microsoft。どうやって開発しとんねん。
で、調べてたらWMIC(Windows Management Instrumentation Commandline)というのに行きついたのでそっちで述べる。
WMIC で 実行中のプロセスを表示する
以下のコマンドで表示される。
WMIC path win32_process get Caption,Processid,Commandline /format:csv
format を csv にしたが、デフォルトだととにかく white space が多くてうざい。のでcsvにしといた。ほかにもlistとかxmlとかいろいろあるみたい。
んで、だらだら出ても探すのが大変なので絞り込む。
WMIC path win32_process get Caption,Processid,Commandline /format:csv | sls "python.exe"
これでpython.exeがコマンドラインに含まれるプロセスだけ出力される。
killしたい場合はプロセスIDも出ているので、
taskkill /pid プロセスID /f
でプロセスIDを指定して殺せる。(/fは-9みたいなもんか。forceという意味らしい。たいていつけないと殺せないのでもうデフォルトでつけとく)
以上!