プロセスの中にスレッドはいくつある? ― PowerShellで実体を観察する

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。.NETのProcessとProcessThreadの公式APIを確認し、読み取り専用でプロセスとスレッドの関係を観察する形に整理しています。

検証ステータス:📘 .NET公式仕様確認済み・Windows実機未確認

アプリ1個が必ず1本の処理だけで動くわけではありません。1つのプロセスの中に複数スレッドが存在する様子をPowerShellから見てみます。

まず試す

$p = Get-Process -Id $PID
"Process: $($p.ProcessName) PID=$($p.Id)"
"Threads: $($p.Threads.Count)"
$p.Threads | Select-Object -First 5 Id,ThreadState,PriorityLevel

ここを見る

PIDは1つでもThread Idが複数並ぶ点が観察ポイントです。$PIDを使うので対象を勝手に選ばず、現在のPowerShell自身だけを読みます。

1か所変えてみる

-First 5を外して全件を表示します。次に少し待って再実行し、状態や本数が変化するか比べます。

なぜそうなる

プロセスはメモリやhandleなどを持つ実行単位で、スレッドはその内部で命令を実行する単位です。複数スレッドを使うアプリでは、待機と処理を分けたり並行して仕事を進めたりできます。

graph TD
P[PowerShell process / PID] --> T1[Thread]
P --> T2[Thread]
P --> T3[Thread]

仕事で使うなら

「CPUが高いプロセス」を見つけた後、内部に多数のスレッドがあることを知る入口になります。ただしThread Idだけで原因を断定せず、ProfilerやETW等の追加観測へつなげます。

Microsoft Process.Threads: https://learn.microsoft.com/dotnet/api/system.diagnostics.process.threads

Microsoft ProcessThread: https://learn.microsoft.com/dotnet/api/system.diagnostics.processthread

文書情報

記事タイトル
プロセスの中にスレッドはいくつある? ― PowerShellで実体を観察する
作成日
更新日
Source URL
https://papanda925.com/?p=15428

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました