コンテンツにスキップ

Top

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"
(slsはSelect-Stringの略称)

これでpython.exeがコマンドラインに含まれるプロセスだけ出力される。

killしたい場合はプロセスIDも出ているので、

taskkill /pid プロセスID /f

でプロセスIDを指定して殺せる。(/fは-9みたいなもんか。forceという意味らしい。たいていつけないと殺せないのでもうデフォルトでつけとく)

以上!