このページの本文へ

前へ 1 2 次へ

Windows Info 第399回

Windowsではプロセスからプログラムに関するさまざまな情報が得られる

2023年10月01日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷
プロセス

Microsoftが提供するSysinternalsの「Process Explorer」を使うと、ジョブオブジェクトを調べることができる。Optionメニューの「Configure Color」でJobsのチェックボックスをオンにする。ジョブでグループ化されているプロセスに指定した色がつく

 コンピューターでは、プログラムを実行するとメモリに読み込まれて「プロセス」になる。プロセスからはさまざまな情報が得られる。今回は、プロセスから情報を取得する方法について解説する。その前に、プロセスや関連の用語が混乱しているので、1回整理しておこう。

そもそもWindowsにおける「プロセス」とは

 「プログラム」とは命令の連なりであり、これを記録したものが実行ファイルだ。ほとんどのプログラムは、実行ファイルという形を持つが、プログラムがプログラムを作って、実行ファイルという形を経ずに実行させることもできる。しかし、セキュリティの観点上、こうした手法には制限がかかる。悪意のある多くのプログラムが実際そうするからだ。そのため、通常はプログラムとは実行ファイルに記録されているものと考えていい。

 プロセスは、プログラムのインスタンス(実体)とも呼ばれることがある。実行ファイルに記録されているものはプログラムの定義であり、実行することで実体となるという考え方だ。あえてたとえるなら、プログラムとプロセスの関係は楽譜と演奏の関係である。

 Windowsは、実行ファイルから読み込まれたコードやデータなどを、一定の方法でメモリ上に配置する。このメモリ領域を実行イメージと呼ぶ。プロセスには、実行時間やファイルへのアクセス、接続しているネットワークポートといった「資源」(リソース)がプロセスに割り当てられる。Windowsでプロセスは、このようなリソースの割り当て、管理単位である。

 プロセスは、1つ以上のスレッドから構成される。スレッドとは、実行スケジューリングの管理単位だ。最初に起動されるのがメインスレッドで、この中でさらにスレッドを作り出すことができる。

 そのほかの用語として「ジョブ」と「タスク」がある。一般的な定義もあるが、Windowsではプロセスをグループとして管理するものがジョブ(正確にはジョブオブジェクト)である。たとえば、Google Chromeは多数のChrome.exeプロセスを作るが、これらはジョブオブジェクトでグループ化されている。ジョブに対しては、起動や停止といった操作をし、ジョブに属するプロセスをまとめて制御できる。

 Windowsでは、「タスク」は、ほぼプロセスの同義語として使われる。たとえば、タスクマネージャーやタスクリスト(tasklist.exe)といったプログラムは、プロセスに関する情報を扱うものだ。ただし、タスクスケジューラーは、プロセスではなく、プログラムの起動を管理している。

プログラムよりもプロセスからの情報を得るほうが簡単

 Windowsを含む多くのOSは、プロセスから情報を得るためのAPIが用意されている。このため、プロセスからプログラムに関する情報を得ることが可能になる。

 もちろん、プログラム自体からも情報を得られるが、そのためにはプログラム(の実行ファイルなど)を解析して、挙動を推測しなければならない。これは、かなり面倒で高度な作業だ。しかし、プログラムを実行してプロセスから情報を得ることは簡単にできる。

 たとえば、アプリケーションのウィンドウに表示されるタイトルはプロセスから簡単な方法で確認できる。しかし、プログラムから得るためには、プログラムコードを追いかけて、タイトルに表示される文字列を作る処理を突き止める必要がある。

 プロセスには、ユーザーが直接起動したプログラムだけでなく、Windowsが起動したプログラムのプロセスや、アプリケーションが起動したプロセスもある。適切な権限さえあれば、こうしたプロセスからさまざまな情報を得られる。

 たとえば、新旧の複数バージョンがインストールされているプログラムでも、プロセスから情報を得ることで、どちらが起動しているのかを判定可能だ。

 タスクマネージャーやリソースマネージャーは、プロセスの情報を表示することができる。またWindowsには、tasklistのようなプロセスを列挙し情報を表示するプログラムもある。ただし、これらは、プロセスが持つ情報の一部しか出力することができない。

 PowerShellのGet-ProcessコマンドやMicrosoftが提供するSysinternalsの「Process Explorer」(https://learn.microsoft.com/ja-jp/sysinternals/downloads/process-explorer、要インストール)は、プロセスからより詳細な情報を得ることができる(記事冒頭画面)。また、Windowsの管理機構であるWMI/CIMを使っても、同様に可能だ。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン