変更履歴/Vitals 1.9
Vitals 1.9:Macのあらゆるプロセスを調べるプロセスインスペクタ
結論
Vitals 1.9で、Vitalsはアクティビティモニタ系アプリであると同時にプロセスインスペクタにもなりました。Macのどのプロセスでも、クリックするとドロワーに、属するアプリ、コード署名とエンタイトルメント、上位プロセスとlaunchdエージェント、コマンドラインの全文、そして起動してから使ったCPU時間、メモリ、開いているファイル、待ち受けポートが表示されます。アプリには、バージョン、バンドルID、Info.plistを載せた「詳細」カードが加わります。これらはすべてCSVとして保存でき、同じ詳細はターミナルではvitals processで、MCP経由でも得られます。
プロセスをクリックして調べる
アクティビティモニタがプロセスについて教えてくれるのは、名前と番号だけです。Vitalsでプロセスをクリックすると表の横にドロワーが開き、macOSがそのプロセスについて明かすすべてがセクションごとに表示されます。
- 01 表のプロセスをクリックします。または、アプリをクリックしてから、そのドロワーのプロセスをクリックします。
- 02 アプリのドロワーでプロセスにポインタを合わせると、閉じるマークの横にⓘが表示されます。これをクリックしても同じ詳細が開きます。
- 03 ドロワーの上位プロセスや下位プロセスをクリックすると、それをたどれます。
詳しくはプロセスインスペクタのページをご覧ください。
あらゆるプロセスのコード署名とエンタイトルメントを確認する
Helperという名前だけでは何もわからないので、まず誰が作ったのかを見ます。「セキュリティ」セクションには、開発元の名前とチームID、強化されたランタイムを使っているかどうか、サンドボックスで動いているかどうかが表示され、持っているすべてのエンタイトルメントがその値とともに並びます。
チームIDの付いた名前は、Appleが確認した開発元です。「署名済み、証明書なし」は、Homebrewや自分でコンパイルしたものでは普通のことです。「署名なし」は、署名がまったくないという意味です。
上位プロセス、launchdエージェント、コマンドライン:なぜ動いているのか
「識別情報」には、上位プロセスとそれを起動したアプリの名前が表示されます。バックグラウンドプロセスなら、「起動」にその裏にあるlaunchdエージェントまたはデーモンの名前が表示されるので、このpostgresはHomebrewのサービスsh.brew.postgresql@17だとわかります。その下には実行ファイルのパスとコマンドラインの全文があり、環境はドロワーの最後に折りたたまれています。
CPU時間、メモリのピーク、開いているファイル、ポート:何を使ったか
パーセントでわかるのは今この1秒のことだけです。ドロワーは、プロセスが起動してからのすべてを示します。ユーザとシステムに分けたCPU時間、現在のメモリとこれまでの最大、スレッド、開いているファイル、ページイン、読み書きしたバイト数です。その下には、待ち受けているポートと起動した下位プロセスが並び、どれもワンクリックで開けます。ドロワーを開いている間は、CPUとメモリのグラフも動き続けます。
すべてのアプリに「詳細」カード、その下にプロセス
アプリを開くと、「詳細」カードにバージョン、バンドルID、アーキテクチャ、コード署名、保護、起動元、インストール場所が表示され、Info.plistの全文もワンクリックで開けます。
その下にプロセスが一覧表示され、それぞれのドロワーを開けます。数秒前に起動したものには「新規」の印が付き、「最近終了」には直近10分間に終了したものが残るので、離れている間にクラッシュしたヘルパーや終わったビルドもそこで確認できます。
CSVとして保存、またはターミナルから問い合わせ
ドロワーのヘッダにある共有ボタンから、CSVとして保存とテキストとしてコピーを選べます。Info.plist、エンタイトルメント、環境、プロセスも含まれます。vitals processは、名前またはPIDで同じ詳細を返します。vitals topは過去にもさかのぼれるようになりました。時間を指定すると、そのときに最も使っていたアプリがわかります。
$ vitals process node $ vitals process 60412 --json $ vitals process node --env --plist $ vitals top --at 14:02 $ vitals top --from 14:00 --to 15:30 Vitalsはアプリの記録を2日間は1時間単位で、それ以降は1日単位で保存します。答えには、どの期間を対象にしているかが示されます。
AIアシスタントにどのプロセスについても尋ねる
Claude、Codex、Cursorは、process_detailsツールでVitalsにどのプロセスについても問い合わせでき、履歴の各ピークの裏にあるアプリも見られます。環境は決して渡されません。キーが含まれていることがあるからです。
- このnodeというプロセスは何?どのアプリのもの?
- ポート3000を使っているプロセスは署名されている?何が起動した?
- 14:02のCPUの急増の原因はどのアプリ?
新しい列が5つと、フィルタの正規表現
ツールバーに新しく加わった列メニューから、PID、ユーザ、開始時刻、バージョン、パスをアプリの表に追加できます。フィルタは、/helper|agent/のようにスラッシュで囲んだ正規表現にも対応しました。
よくある質問
1.9は無料のアップデートですか?
はい。Vitalsで「アップデートを確認」を選んでください。その内容はすべてどのライセンスにも含まれています。
一部のプロセスで表示される詳細が少ないのはなぜですか?
macOSは、プロセスのコマンドライン、環境、起動してからの合計を、そのプロセスを実行しているユーザにしか見せません。macOSやほかのアカウントに属するプロセスでも、識別情報とコード署名は表示されます。CPUとメモリはVitalsのオプションのヘルパーで見られます。「設定」→「一般」でシステム全体の計測をオンにしてください。
プロセスが安全かどうかはわかりますか?
判断するための事実を示します。コード署名、上位プロセス、どこにあるか、何をしているかです。Vitalsはマルウェアをスキャンしません。
プロセスのサンプルやspindumpは取れますか?
いいえ。固まったアプリのスタックトレースが必要なら、アクティビティモニタを開いて「サンプル」を押してください。
1.9のすべて
Vitals 1.9は無料のアップデートです。Vitalsで「アップデートを確認」を選ぶか、vitalsmac.comからダウンロードしてください。
- 新機能 プロセスインスペクタ。 アクティビティモニタがプロセスについて教えてくれるのは、名前と番号だけです。Vitalsでプロセスをクリックすると、残りはドロワーが教えてくれます。属するアプリ、コード署名とチームID、強化されたランタイム、サンドボックス、エンタイトルメント、上位プロセスとlaunchdエージェント、コマンドラインの全文と環境、開いているファイル、待ち受けポート、下位プロセスです。上位プロセスや下位プロセスをクリックすると、それをたどれます。
- 新機能 今この1秒だけでなく、プロセスが起動してからのすべて。 起動してからのCPU時間(ユーザとシステムに分けて)、現在のメモリとそのピーク、スレッド、ページイン、読み書きしたバイト数に加えて、ドロワーを開いている間はCPUとメモリのライブグラフも表示されます。
- 新機能 すべてのアプリに「詳細」カード。 アプリのドロワーに、バージョン、バンドルID、アーキテクチャ、コード署名、保護、起動元、実行時間、インストール場所が表示されるようになりました。Info.plistの全文もワンクリックで開けます。
- 新機能 起動したばかりのものと、終了したばかりのもの。 アプリのドロワーでプロセスをクリックすると、その詳細が開きます。数秒前に起動したプロセスには「新規」の印が付き、「最近終了」には直近10分間に終了したものがその実行時間とともに残るので、クラッシュしたヘルパーもそこで確認できます。
- 新機能 コピーするか、CSVとして保存。 どのドロワーも、バグ報告用にテキストとしてコピーしたり、CSVファイルとして「ダウンロード」に保存したりできます。Info.plist、エンタイトルメント、環境、プロセスも含まれます。
- 新機能 ターミナルでもAIアシスタントでも同じ内容。
vitals processは、名前またはPIDで同じ詳細を、テキストまたは--jsonで返します。--envで環境を、--plistでInfo.plistを追加できます。Claude、Codex、Cursorはprocess_detailsツールで同じ詳細を取得できますが、環境は渡されません。キーが含まれていることがあるからです。 - 新機能 急増の裏にあるアプリ。
vitals top --at 14:02または--from 14:00 --to 15:30で、その時間に最も使っていたアプリがわかります。履歴を読むアシスタントには、各ピークの横にアプリも見えます。 - 改善 新しい列が5つ。 PID、ユーザ、開始時刻、バージョン、パスをアプリの表に追加できます。ツールバーに新しく加わった「列」メニューから選びます。
- 改善 フィルタで正規表現が使えます。
/helper|agent/のように、スラッシュでパターンを囲んで入力します。