詞彙表/你會看到的程序

launchd

簡短回答

launchd是macOS開機時啟動的第一個程序,程序ID為1。系統上以及為每位使用者執行的背景服務、代理程式和許多其他程序,都由它啟動和管理。

Mac開機時,核心會啟動launchd,再由launchd啟動幾乎其他所有東西。它也會視需要啟動服務,例如某個App提出要求時;系統服務意外停止時,它也會將其重新啟動。

在活動監視器中,你通常只會看到一個launchd,也就是PID為1的那個。它平常使用的CPU和記憶體都很少。

launchd為什麼CPU用量很高

launchd本身很少做繁重的工作。它看起來很忙時,通常是在反覆啟動程序,例如某個背景項目不斷當掉又被重新啟動。

在活動監視器中找找看有沒有反覆出現又消失的程序,或查看「系統設定」→「一般」→「登入項目」,看看哪些背景項目被允許執行。關閉不需要的背景項目,是安全的第一步。

為什麼不應該結束launchd

系統的launchd是整個系統的父程序,無法用一般方式結束;而停止使用者的launchd會結束你的工作階段。請改為修正它不斷啟動的那個程序。

如何找出launchd背後的登入項目

launchd看起來很忙時,真正的問題是它一直在啟動什麼。先檢查你允許在背景執行的項目。

  1. 選擇蘋果選單>「系統設定」,按一下側邊欄中的「一般」,然後按一下「登入項目與延伸功能」。
  2. 逐一查看登入時打開的項目,以及允許在背景執行的App列表。任何你不認得或不再使用的項目都有嫌疑。
  3. 一次關閉一個項目,同時在活動監視器中觀察launchd。如果它的CPU用量降下來了,你就找到那個項目了。
  4. 如果該項目屬於你仍在使用的App,就更新這個App或檢查它自己的設定。如果你已不再使用這個App,而它有自己的解除安裝程式,就用那個程式解除安裝。

如何找出不斷重新啟動的服務

當掉後又被重新啟動的服務,會在活動監視器中出現一下、消失,然後帶著新的PID再次出現。在「CPU」標籤頁中依PID由高到低排序,會比較容易抓到它們,因為每次重新啟動都會拿到更大的號碼。

在「終端機」中,launchctl list會分三欄顯示launchd為你的帳號載入的工作:工作正在執行時的PID、上次的結束狀態,以及標籤。第一欄是連字號,表示該工作此刻沒有在執行。負數狀態是讓該工作停止的訊號,很多Apple工作都會顯示負數,因為macOS會刻意停止閒置的服務,所以只憑非零狀態並不代表有問題。

對於你懷疑的標籤,執行launchctl print gui/$(id -u)/<label>。輸出中有一行runs,也就是launchd啟動該工作的次數。如果每次查看這個數字都在增加,代表該工作陷入了重新啟動迴圈。這些指令只會讀取資訊。

第三方背景項目存放在哪裡

launchd會從幾個檔案夾讀取工作定義。Apple自己的工作在/System/Library/LaunchAgents和/System/Library/LaunchDaemons中,這些請不要動。其他App安裝的項目通常在以下檔案夾中:

  • ~/Library/LaunchAgents:只給你的使用者帳號使用的代理程式。
  • /Library/LaunchAgents:給所有使用者使用的代理程式,由管理者或App安裝程式安裝。
  • /Library/LaunchDaemons:系統層級的常駐程式,由管理者或App安裝程式安裝。

常駐程式、代理程式和XPC服務

launchd會執行好幾種工作,這些名稱會出現在活動監視器和launchctl的輸出中。常駐程式(daemon)是系統層級的服務,整台Mac上所有人共用一份,不會顯示任何介面。代理程式(agent)會為每個已登入的使用者分別執行,可以和該使用者互動。

launchd也管理XPC服務,也就是包在App和框架裡的小型輔助程式。當App把工作交給其中一個時,launchd會在需要時啟動它,它會在活動監視器中顯示為獨立的程序。這也是你使用App時,名稱陌生的程序時有時無的原因之一。

大家常問的問題

Mac上的launchd是什麼?

它是macOS的服務管理程式,也是開機時啟動的第一個程序,負責啟動和監督大多數其他程序。

為什麼有好幾個launchd程序?

系統有一個(PID 1),每個使用者工作階段還各有其他實例。這是正常的。

可以強制結束launchd嗎?

不行。系統的其餘部分都靠它執行。如果它看起來很忙,請找出那個不斷重新啟動的背景項目。

launchd是病毒嗎?

不是。launchd是macOS的一部分,一律以PID 1執行。惡意軟體可能會加入自己的工作讓launchd啟動,所以養成檢查「登入項目與延伸功能」的習慣很好。

launchctl list顯示的是什麼?

launchd已載入的每個工作,以及它正在執行時的PID、上次的結束狀態和標籤。標籤通常包含公司和產品名稱,能幫你分辨是哪個App安裝了這個工作。

從LaunchAgents移除項目安全嗎?

只限你認得而且不再使用的App,而且更好的做法是在「登入項目與延伸功能」中關閉該項目,或使用App的解除安裝程式。絕對不要從/System裡的檔案夾移除任何東西。

相關詞條

逐步教學:Mac為什麼無法睡眠。

想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。