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"
ユーザーの応答を待つ