Windows プロセスの親子関係を見る

Windows プロセスの親子関係について調べます。

動作確認環境

  • Windows 11 Home 21H2

プロセスツリーを見る

Windows では、あるプロセスから別のプロセスを生成すると、親子の関係になります。親子関係は Sysinternals のプロセスエクスプローラー (ProcExp.exe) で確認できます。

Windows のシェルである「エクスプローラー (explorer.exe)」から「Excel (excel.exe)」と「コマンドプロンプト (cmd.exe)」を起動し、コマンドプロンプトから「ワード (winword.exe)」を起動し、ワードから[ファイルを開く]ダイアログボックスを利用して「メモ帳 (notepad.exe)」を起動した場合の親子関係を見てみましょう。

想定通りのプロセスツリーが構成されています。
※ conhost.exe は cmd.exe が自動的に生成するプロセスです。その他、本調査に関係のないプロセスの情報は消しています。以下同様。

親プロセス以下一式の終了が可能

taskkill コマンドの「/T」オプションを使うと、親プロセス以下一式を終了させることができます。

C:\> taskkill /?

TASKKILL [/S システム [/U ユーザー名 [/P [パスワード]]]]
         { [/FI フィルター] [/PID プロセスID | /IM イメージ名] } [/T] [/F]
......
    /T        指定したプロセスとそのプロセスが開始
              したすべての子プロセスを削除します。
......

タスクマネージャーから[プロセスツリーの終了]コマンドを選択しても同じことができます。

それでは、taskkill コマンドでコマンドプロンプト以下一式を強制終了してみます。

C:\> taskkill /f /im cmd.exe /t

コマンドプロンプト、および、子供のワードと孫のメモ帳が終了しました。

シェルであるエクスプローラー以下一式を強制終了するとどうなるでしょうか。

エクスプローラーも Excel も終了し、真っ白なデスクトップになりました。

この画面から復旧させるには、たとえば [Ctrl]+[Shift]+[Esc] キーを押してタスクマネージャーを起動し、[ファイル]-[新しいタスクの実行]から「explorer.exe」を実行してください。

親プロセスを失うと新しいツリーが作られる

再度、冒頭のツリー状態を構築します。

さきほどは「コマンドプロンプト以下一式」を強制終了しましたが、今度は「コマンドプロンプトのみ」を強制終了してみます。

C:\> taskkill /f /im cmd.exe

「エクスプローラー」→「コマンドプロンプト」→「ワード」→「メモ帳」の連鎖が切れ、「エクスプローラー」と対等な、「ワード」→「メモ帳」という新しいプロセスツリーが誕生しました。

ワードのプロパティを見ると親プロセスが「cmd.exe(14796)」であったことは記憶されていますが、親の親をたどることができず独立することになったイメージです。

続いてエクスプローラー以下一式を強制終了してみます。前回は画面が真っ白になりましたが、どうなるでしょうか。

ワードとメモ帳がエクスプローラーから独立しているので、巻き込まれることなく、真っ白なデスクトップにこの 2 つのアプリケーションが開いているという不思議な状態になりました。

Edge を終了しても生き返る理由

Windows にログオンし Microsoft Edge を起動したときのプロセスツリーを示します。エクスプローラーの子孫として複数の「msedge.exe」プロセスが生成されています。

この状態で Edge を終了すると、エクスプローラーの配下からは「msedge.exe」が消えるものの、新たにエクスプローラーと対等の「msedge.exe」ツリーが生成されます。どういうことでしょうか。OS と Edge が密に結合していて何か特別な処理をしているのでしょうか。

いえ、Edge には「スタートアップブースト」という設定があり、デフォルトで ON になっています。

この機能を有効にしていると、Edge は終了直前にスタートアップブースト用の「msedge.exe」を子プロセスとして起動し、その後自分自身を終了します。すると、親を失ったスタートアップブースト用「msedge.exe」は独立し、エクスプローラーと対等な位置にプロセスツリーを形成します。

これが Edge を終了しても生き返る(ように見える)理由であり、OS が Edge を特別扱いしているわけではありませんでした。

「スタートアップブースト」の設定を OFF にすると、Edge の終了とともに「msedge.exe」プロセスも終了します。