ブログに戻る

macOSでプロセスを監視する方法:開発者向け完全ガイド

Activity Monitorを超えて、macOSのプロセスを監視・検査・管理する方法を解説。プロセスツリーやPIDから環境変数、コード署名まで網羅します。

macOS開発者なら誰もが同じ壁にぶつかります。Activity Monitorを見ればCPUを食っているプロセスはわかるが、なぜそうなっているかを突き止めるのに必要なデータがほとんど得られない。このガイドでは、macOSのプロセス監視について基本から実践的なデバッグ手法まで、知っておくべきことをすべて解説します。

結論から言うと

macOSのプロセスを効果的に監視するには、簡単なリソース確認にはActivity Monitor、根本原因の分析にはProcXrayやターミナルツールを使いましょう。鍵となるのは、プロセスツリー、起動コンテキスト、環境変数、短命なサブプロセスの可視化です。

プロセスとは何か

macOSでは、実行中のプログラムはすべて固有の**Process ID(PID)**を持つプロセスです。ブラウザを開くと、macOSは親プロセスを生成し、その親プロセスがさらに数十の子プロセス(レンダラープロセス、GPUプロセス、拡張機能プロセスなど)を生成することがあります。この階層構造を理解することが、効果的な監視の第一歩です。

基本:Activity Monitor

Appleの標準ツールであるActivity Monitor(/Applications/Utilities/Activity Monitor.app)では以下が確認できます:

日常的な用途には十分です。しかし開発者にとっては、すぐに物足りなくなります。

Activity Monitorにできないこと

開発者としてすぐに突き当たる壁を紹介します:

プロセスツリー表示がない。 Activity Monitorはフラットなリストしか表示しません。シェルスクリプトが5つのヘルパープロセスを生成し、さらにそれらが子プロセスを生成した場合、カオスな表示になります。何が何を生成したのか判別できません。

環境変数が見られない。 プロセス内でNODE_ENVDYLD_LIBRARY_PATHが正しく設定されていない原因をデバッグする際、実際にプロセスが起動時に受け取った環境変数を確認する方法がありません。

リアルタイムの正規表現検索がない。 300個のプロセスを名前でフィルタリングするには慎重に入力する必要があり、頻繁にリセットされます。

短命なプロセスが見えない。 ビルドシステムがミリ秒単位でコンパイラプロセスを起動・終了させている場合、Activity Monitorはそれを捕捉できません。

コマンドラインの活用

pstoplsofdtraceでいくつかのギャップを埋められます:

# プロセスツリーを表示
ps auxf

# プロセスの開いているファイルをすべて表示
lsof -p <PID>

# プロセスの環境変数を表示
ps eww -p <PID>

強力なツールですが使い勝手が良いとは言えません。ps ewwは環境変数を読みづらいテキストの壁として出力し、lsofの出力は数千行に及ぶこともあります。

より良いアプローチ:ProcXray

ProcXrayは、Activity Monitor以上の機能を必要とする開発者のために作られた、macOSネイティブのアプリです。本当に必要なデータを提供します:

プロセスツリー表示

フラットリストとライブプロセスツリーを切り替えられます。親子関係が一目でわかるため、シェルスクリプト、ビルドツール、ChromeやElectronのようなマルチプロセスアプリのデバッグに不可欠です。

環境変数インスペクター

任意のプロセスをクリックしてEnvironmentタブに切り替えると、プロセスが起動時に受け取ったすべての環境変数が一覧表示され、検索可能で、JSONとしてコピーもできます。もうps ewwの出力を解析する必要はありません。

リアルタイム正規表現検索

正規表現パターンを入力すると、プロセス名、PID、コマンドライン引数、パスを横断して即座にフィルタリングされます。node.*serverpython3.*manageをミリ秒で見つけられます。

短命なプロセスの捕捉

ProcXrayは新しく生成されたプロセスを緑色でハイライトし、終了したプロセスを設定可能な期間だけ赤色で保持します。Activity Monitorがリフレッシュする前に消えてしまう一時的なコンパイラやリンカーのプロセスを、ようやく確認できるようになります。

コード署名の検証

セキュリティ監査のために、ProcXrayは各プロセスが署名されているかどうか、誰が署名したか、どのようなentitlementsを持っているかを表示します。ターミナルを開く必要はありません。

どのツールをいつ使うか

シナリオツール
簡単なCPU/メモリ確認Activity Monitor
暴走プロセスのデバッグProcXray
プロセスの環境変数を調べるProcXray
プロセスの生成元を特定するProcXray
未署名プロセスのセキュリティ監査ProcXray
スクリプトによる自動監視pstopdtrace

始めよう

ProcXrayをダウンロード — 無料、コード署名済み、Appleの公証済みです。macOS 14(Sonoma)以降、Apple SiliconまたはIntelに対応しています。

インストールすれば、日常的なActivity Monitorの習慣が、実際に作業を加速してくれるツールに置き換わります。

よくある質問

不審なプロセスの生成元を最速で特定するには?

ライブプロセスツリーを使いましょう。親子関係を見れば、どのシェルスクリプト、ビルドステップ、アプリコンポーネントがそのプロセスを起動したかが即座にわかります。

macOSでプロセスの環境変数を確認するには?

ターミナルからps eww -p <PID>を使えますが、変数が多い場合やインシデント分析を繰り返す場合は、GUIベースの環境変数インスペクターの方が効率的です。

開発者はActivity Monitorを完全にやめるべきですか?

いいえ。軽い確認にはActivity Monitorを使い続け、プロセスの系譜、起動引数、環境データ、セキュリティコンテキストが必要になったら、より高度なツールに切り替えましょう。

参考資料