launchd
簡短回答
launchd是macOS開機時啟動的第一個程序,程序ID為1。系統上以及為每位使用者執行的背景服務、代理程式和許多其他程序,都由它啟動和管理。
Mac開機時,核心會啟動launchd,再由launchd啟動幾乎其他所有東西。它也會視需要啟動服務,例如某個App提出要求時;系統服務意外停止時,它也會將其重新啟動。
在活動監視器中,你通常只會看到一個launchd,也就是PID為1的那個。它平常使用的CPU和記憶體都很少。
launchd為什麼CPU用量很高
launchd本身很少做繁重的工作。它看起來很忙時,通常是在反覆啟動程序,例如某個背景項目不斷當掉又被重新啟動。
在活動監視器中找找看有沒有反覆出現又消失的程序,或查看「系統設定」→「一般」→「登入項目」,看看哪些背景項目被允許執行。關閉不需要的背景項目,是安全的第一步。
為什麼不應該結束launchd
系統的launchd是整個系統的父程序,無法用一般方式結束;而停止使用者的launchd會結束你的工作階段。請改為修正它不斷啟動的那個程序。
如何找出launchd背後的登入項目
launchd看起來很忙時,真正的問題是它一直在啟動什麼。先檢查你允許在背景執行的項目。
- 選擇蘋果選單>「系統設定」,按一下側邊欄中的「一般」,然後按一下「登入項目與延伸功能」。
- 逐一查看登入時打開的項目,以及允許在背景執行的App列表。任何你不認得或不再使用的項目都有嫌疑。
- 一次關閉一個項目,同時在活動監視器中觀察launchd。如果它的CPU用量降下來了,你就找到那個項目了。
- 如果該項目屬於你仍在使用的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上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。