コマンドプロンプトでどんなタスクが動作しているかを確認しよう[tasklist]

2019年9月24日

妹「なんだかパソコンの動作が遅いんだよね」
兄「何か余計なタスクがいるのかもしれないね。こういう時は『 tasklist 』を使うといいよ」
妹「tasklist?」
兄「まず、普通にtasklistと入力してみようか」

イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 36 K
Registry 120 Services 0 80,504 K
smss.exe 440 Services 0 592 K
csrss.exe 644 Services 0 4,808 K
wininit.exe 740 Services 0 5,428 K
csrss.exe 748 Console 1 5,928 K
services.exe 820 Services 0 9,448 K
lsass.exe 836 Services 0 18,512 K
svchost.exe 960 Services 0 3,204 K
fontdrvhost.exe 980 Services 0 2,944 K
svchost.exe 992 Services 0 30,252 K
svchost.exe 480 Services 0 17,032 K

妹「何かいっぱい出てきた……」
兄「自分が軌道しているソフト以外にも何らかのタスクが軌道しているからね。タスクマネージャよりも詳しい情報が出てくるよ。例えばtasklist /mとしてみよう」

イメージ名 PID モジュール
========================= ======== ============================================
System Idle Process 0 N/A
System 4 N/A
tasklist.exe 5688 ntdll.dll, KERNEL32.DLL, KERNELBASE.dll,
ADVAPI32.dll, msvcrt.dll, sechost.dll,
RPCRT4.dll, USER32.dll, win32u.dll,
GDI32.dll, gdi32full.dll, msvcp_win.dll,
ucrtbase.dll, OLEAUT32.dll, combase.dll,
bcryptPrimitives.dll, VERSION.dll, MPR.dll,
WS2_32.dll, SHLWAPI.dll, dbghelp.dll,
framedynos.dll, SspiCli.dll, srvcli.dll,
netutils.dll, IMM32.DLL,
kernel.appcore.dll, clbcatq.dll,
wbemprox.dll, wbemcomn.dll, bcrypt.dll,
Winsta.dll, wbemsvc.dll, fastprox.dll,
wmiutils.dll

兄「/Mオプションで使用モジュールが使われる。 DLLのリンクミス、依存関係の確認等で使用したりするかな。自作ソフトウェアを作らない場合は、特に意味はないけどやたらと変なDLLでエラーが発生している時はこれで確認してみると意図していないプロセスが動いているかもしれないよ。次は『 /APPS 』を入れてみよう。/APPSオプションでパッケージ名が表示されるよ」

イメージ名 PID メモリ使用量 パッケージ名
================================================== ======== ============ ==================================================
ShellExperienceHost.exe (App) 8692 100,972 K Microsoft.Windows.ShellExperienceHost_10.0.17763.1
SearchUI.exe (CortanaUI) 8936 195,028 K Microsoft.Windows.Cortana_1.11.6.17763_neutral_neu
RuntimeBroker.exe (runtimebroker07f4358a809ac99a64 8416 43,624 K Microsoft.Windows.Cortana_1.11.6.17763_neutral_neu
RuntimeBroker.exe (runtimebroker07f4358a809ac99a64 9296 27,496 K Microsoft.Windows.ShellExperienceHost_10.0.17763.1
SkypeBackgroundHost.exe (ppleae38af2e007f4358a809a 10140 116 K Microsoft.SkypeApp_14.51.72.0_x64__kzf8qxf38zg5c

兄「さらに詳細な情報が必要な場合は『 Tasklist /V 』で表示されるよ。セッションとメモリを見てESXIサーバーのリソースをやたらと使用している人に『少しは自重しろ』とNetでメッセージを送ったりするんだよ」

Tasklist /V
/Vオプションで詳細な情報が表示される。複数人でサーバーを利用している時等に利用。

イメージ名 PID セッション名 セッション# メモリ使用量 状態 ユーザー名 CPU 時間 ウィンドウ タイトル
========================= ======== ================ =========== ============ =============== ================================================== ============ ========================================================================
Calculator.exe 5136 Console 1 63,864 K Running 0:00:00 電卓
RuntimeBroker.exe 2348 Console 1 16,356 K Running 0:00:00 OleMainThreadWndName
svchost.exe 6736 Services 0 7,760 K Unknown 0:00:00 N/A
svchost.exe 9260 Services 0 7,864 K Unknown 0:00:00 N/A
tasklist.exe 12664 Console 1 8,880 K Unknown 0:00:00 N/A
clip.exe 6312 Console 1 4,404 K Unknown 0:00:00 N/A

兄「それから、タスクで条件を使って絞り込みたい時があるよね。下記のような形で絞り込めるよ」
Tasklist /FI “条件”
/FIオプションで詳細な情報が表示される。複数人でサーバーを利用している時等に利用する。
eqはイコール。”同じ値”
neはノットイコール。”違う値”
gtはグレーターザン。”より大きい”
ltはレスザン。”より小さい”
の略だね。正規表現も使えるよ

フィルター名    有効な演算子              有効な値
-----------     ---------------           --------------------------
STATUS          eq, ne                    RUNNING | SUSPENDED
IMAGENAM        eq, ne                    イメージ名
PID             eq, ne, gt, lt, ge, le    PID 値
SESSION         eq, ne, gt, lt, ge, le    セッション番号
SESSIONNAME     eq, ne                    セッション名
CPUTIME         eq, ne, gt, lt, ge, le    次の形式の CPU 時間
MEMUSAGE        eq, ne, gt, lt, ge, le    メモリ使用 (KB)
USERNAME        eq, ne                    [ドメイン\]ユーザーの形式の
SERVICES        eq, ne                    サービス名
WINDOWTITLE     eq, ne                    ウィンドウ タイトル
MODULES         eq, ne                    DLL 名

Tasklist /FI “WindowTitle eq 電卓”
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
Calculator.exe 5136 Console 1 63,800 K

Tasklist /FI “Imagename eq c*”
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
csrss.exe 644 Services 0 4,732 K
csrss.exe 748 Console 1 5,244 K
conhost.exe 7320 Services 0 4,504 K
ctfmon.exe 7900 Console 1 19,468 K
conhost.exe 2080 Services 0 4,936 K
conhost.exe 15272 Console 1 5,416 K

妹「絞り込む時ってどういう時なの?」
兄「複数タスクのシステムのプロセスをA01,A02とかで作成しておいて、A*で自分の作成したタスクだけを確認したい場合だとか、メモリをやたらと使用している時に、100MB以上メモリを使用しているタスクを探したりする時に使うよ」
妹「絞り込む時はTaskManagerの方が楽そうだね。グリッドクリックで並び替えられるし」
兄「数が多くなるとtaskmanagerはメモリ使用量で細かく動く事もあるだろうし、Tasklistはコマプロで動作するから、|Clipしてメモ帳に張り付けて……一気にtaskkill /f /imとかに置き換えて邪魔なプロセスをまとめてKillしたり」
妹「メモリ使用量調査!とかレポートを書く時もこれを使うと楽そうだね」