launchd
結論
launchdは、macOSが起動時に最初に開始するプロセスで、プロセスIDは1です。システム全体とユーザごとに動くバックグラウンドサービス、エージェント、そのほか多くのプロセスを起動・管理します。
Macが起動すると、カーネルがlaunchdを開始し、launchdがほかのほとんどすべてを起動します。アプリから要求があったときなど、必要に応じてサービスを起動し、予期せず停止したシステムサービスを再起動する役割もあります。
アクティビティモニタには、通常PIDが1のlaunchdが1つだけ表示されます。CPUとメモリはふだんほとんど使いません。
launchdのCPU使用率が高い理由
launchd自体が重い処理をすることはめったにありません。忙しそうに見えるときは、プロセスの起動を何度も繰り返していることが多く、たとえばクラッシュしては再起動されるバックグラウンド項目があります。
アクティビティモニタで現れたり消えたりを繰り返すプロセスを探すか、システム設定 → 一般 → ログイン項目と機能拡張で、実行が許可されているバックグラウンド項目を確認します。不要なバックグラウンド項目をオフにするのが、安全な最初の一歩です。
launchdを終了してはいけない理由
システムのlaunchdは、システム全体の親プロセスです。通常の方法では終了できず、ユーザのlaunchdを止めるとセッションが終わってしまいます。代わりに、launchdが起動し続けているプロセスの問題を解決しましょう。
launchdの背後にあるログイン項目を見つける方法
launchdが忙しそうに見えるとき、本当に知りたいのは何を起動し続けているかです。まず、許可しているバックグラウンド項目を確認しましょう。
- アップルメニュー > “システム設定”を選び、サイドバーの“一般”をクリックしてから、“ログイン項目と機能拡張”をクリックします。
- ログイン時に開く項目と、バックグラウンドでの実行を許可されているアプリのリストに目を通します。見覚えのないものや、もう使っていないものが候補です。
- 項目を1つずつオフにして、アクティビティモニタでlaunchdを見守ります。CPU使用率が下がれば、その項目が原因です。
- その項目がまだ使っているアプリのものなら、アプリをアップデートするか、アプリ自体の設定を確認します。もう使っていないアプリなら、専用のアンインストーラがあればそれを使ってアンインストールします。
再起動を繰り返すサービスを見つける方法
クラッシュしては再起動されるサービスは、アクティビティモニタに一瞬現れては消え、新しいPIDでまた現れるプロセスとして表示されます。再起動のたびに番号が大きくなるので、“CPU”タブをPIDの大きい順に並べ替えると見つけやすくなります。
ターミナルでlaunchctl listを実行すると、launchdが自分のアカウント用に読み込んでいるジョブが3列で表示されます。ジョブが実行中ならそのPID、最後の終了ステータス、ラベルです。1列目のダッシュは、そのジョブが現在実行されていないことを意味します。負のステータスはジョブを止めたシグナルを表し、macOSはアイドル状態のサービスを意図的に止めるので、多くのAppleのジョブで表示されます。つまり、ステータスが0でないだけでは問題ではありません。
怪しいラベルがあれば、launchctl print gui/$(id -u)/<label>を実行します。出力にはrunsの行があり、launchdがそのジョブを起動した回数を示しています。確認するたびにこの数が増えているなら、そのジョブは再起動ループに陥っています。これらのコマンドは情報を読み取るだけです。
他社製のバックグラウンド項目の保存場所
launchdは、いくつかのフォルダからジョブの定義を読み込みます。Apple自身のジョブは/System/Library/LaunchAgentsと/System/Library/LaunchDaemonsにあり、これらには手を付けないでください。ほかのアプリがインストールした項目は、たいてい次のフォルダにあります:
~/Library/LaunchAgents: 自分のユーザアカウント専用のエージェント。/Library/LaunchAgents: 管理者やアプリのインストーラがインストールした、すべてのユーザ用のエージェント。/Library/LaunchDaemons: 管理者やアプリのインストーラがインストールした、システム全体のデーモン。
デーモン、エージェント、XPCサービス
launchdはいくつかの種類のジョブを実行していて、その名前はアクティビティモニタやlaunchctlの出力に表れます。デーモンはシステム全体のサービスで、Macを使う全員のために1つだけ動き、画面には何も表示しません。エージェントはログインしているユーザごとに別々に動き、そのユーザとやり取りできます。
launchdは、アプリやフレームワークの中に同梱された小さなヘルパープログラムであるXPCサービスも管理しています。アプリがこうしたサービスに作業を任せると、launchdが必要に応じてそれを起動し、アクティビティモニタに独立したプロセスとして表示されます。アプリを使っている間に見慣れない名前のプロセスが現れたり消えたりするのは、これが理由の1つです。
よくある質問
Macのlaunchdとは?
macOSのサービスマネージャです。起動時に最初に開始されるプロセスで、ほかのほとんどのプロセスを起動し、監視しています。
launchdのプロセスが複数あるのはなぜ?
システム用に1つ(PID 1)あり、それとは別にユーザのセッションごとのインスタンスがあります。これは正常です。
launchdを強制終了できる?
いいえ。launchdがシステムのほかの部分を動かしています。忙しそうに見えるときは、再起動を繰り返しているバックグラウンド項目を探しましょう。
launchdはウイルス?
いいえ。launchdはmacOSの一部で、常にPID 1で動いています。マルウェアがlaunchdに起動させる独自のジョブを追加することはあるので、“ログイン項目と機能拡張”を確認する習慣を付けておくとよいでしょう。
launchctl listは何を表示する?
launchdが読み込んだ各ジョブを、実行中ならPID、最後の終了ステータス、ラベルとともに表示します。ラベルには通常、会社名と製品名が含まれているので、どのアプリがそのジョブをインストールしたかがわかります。
LaunchAgentsから項目を削除しても大丈夫?
見覚えがあり、もう使っていないアプリのものに限ります。それでも、“ログイン項目と機能拡張”で項目をオフにするか、アプリのアンインストーラを使うほうがよいでしょう。/Systemの中のフォルダからは、決して何も削除しないでください。
関連項目
詳しい手順: Macがスリープしない原因。
アクティビティモニタより優れたものをお探しなら、Mac向けアクティビティモニタの代替アプリのおすすめをご覧ください。用語集のすべての用語も見られます。