質問: プロセスモニターを使用して、プロセスとその子をトレースするにはどうすればよいですか? sysinternals プロセスモニター (procmon.exeまたはprocmon64.exe)、特定のpidとその子プロセスを使用してプロセスをトレースするにはどうすればよいですか?私の最初の(ナイーブな)アイデアは、「pid is1234」と「parentpidis 1234」の両方の述語を含めることでした。これらは、orではなくandを使用して結合されているため、相互に排他的であることがわかります。どういうわけかフィルターをorで結合することは可能ですか?
回答: fromprocess monitor help(procmon.chm): プロセスモニター [〜#〜]または[〜#〜]特定の属性タイプに関連するすべてのフィルターと [〜#〜] and [〜#〜] s一緒に異なる属性タイプのフィルター。 トレースしたいとしましょうpowershell.exeプロセスとその子プロセス。次に、window rundialogueからpowershellを起動します(win+r) なのでcmd.exe /c "title="mycmd" & tasklist /v /fo csv | findstr /i "powershell\.exe" & echo --- & start "" "powershell" & >nul timeout /t 2 & tasklist /v /fo csv | findstr /i "mycmd powershell\.exe" & pause" mycmdウィンドウの出力が次のようになっているとしましょう。 "powershell.exe","5384","console","1","88 752 k","running","pc\user","0:00:01","windows powershell" --- "powershell.exe","5384","console","1","88 752 k","running","pc\user","0:00:01","windows powershell" "cmd.exe","5008","console","1","4 488 k","running","pc\user","0:00:00",""mycmd" " "powershell.exe","4344","console","1","84 468 k","running","pc\user","0:00:01","n/a" press any key to continue . . . 次に、process monitorでフィルターを次のように設定できますparent pid is 4344 # childs of newly created powershell.exe instance parent pid is 5008 # childs of ephemeral cmd.exe i.e our powershell.exe process name is not conhost.exe # service utility for any console application 言い換えると:(parent pid is 4344 [〜#〜]または[〜#〜] 5008)[〜#〜] and [〜#〜](process name is not conhost.exe)ザ・ win+r コマンドの意味: cmd.exe /c "title="mycmd":補助(エフェメラル)コマンドプロンプトインスタンスを開始し、そのタイトルを設定してから、次のタスクを実行します: tasklist /v /fo csv | findstr /i "powershell\.exe"現在の(現在の)powershellインスタンスを一覧表示します echo ---行区切り文字を印刷する start "" "powershell"新しいpowershellインスタンスを起動します >nul timeout /t 2少し待つ tasklist /v /fo csv | findstr /i "mycmd powershell\.exe"powershellの現在のインスタンスと補助的なcmd.exe pause"ユーザーの応答を待つ