←→ Underneath: Background Apps · 所有 Mac 指南

如何在 Mac 上安全地停用啟動代理程式

最常見的建議是把 .plist 從 LaunchAgents 中刪除。但這也是最糟的做法:工作會一直執行到你重新開機,而且無法復原。以下是安全且可復原的做法。

簡短回答:找出工作的標籤,然後執行

launchctl bootout gui/$(id -u)/com.example.label
launchctl disable gui/$(id -u)/com.example.label

第一個指令會立即停止它。第二個指令會讓它在重新開機後保持關閉。launchctl enable 可以復原。

開始之前:不要更動 /System/Library 中的任何東西,或任何以 com.apple. 開頭的標籤。它們屬於 macOS。除非你要移除該工具,否則請不要動 VPN、備份、安全性和驅動程式工具。

步驟 1:找出工作

啟動代理程式和常駐程式位於以下三個你可以更改的檔案夾中:

列出目前已載入的項目,排除 Apple 自己的工作:

launchctl list | grep -v com.apple

欄位依序為程序 ID(未執行時為 -)、上次結束狀態,以及標籤。你需要的是標籤。

步驟 2:確認它的用途

plutil -p ~/Library/LaunchAgents/com.example.label.plist

如果程式路徑指向你已刪除的 App,這個工作就是殘留項目,可以安全移除。如果它是更新程式,停用後 App 就不會自動更新。

步驟 3:備份

mkdir -p ~/LaunchAgents-backup
cp ~/Library/LaunchAgents/com.example.label.plist ~/LaunchAgents-backup/

步驟 4:立即停止

代理程式(位於任一 LaunchAgents 檔案夾):

launchctl bootout gui/$(id -u)/com.example.label

位於 /Library/LaunchDaemons 的常駐程式:

sudo launchctl bootout system/com.example.label

這會卸載工作並結束其程序。這個狀態在重新開機後不會保留(如果工作設有 RunAtLoad)。

步驟 5:讓它保持關閉

選擇其中一種。

選項 A:launchctl disable(建議)

launchctl disable gui/$(id -u)/com.example.label

常駐程式請用:sudo launchctl disable system/com.example.label。

macOS 會把標籤存到它自己的停用清單中,所以即使 App 重新寫入 plist,工作仍會保持關閉。用以下指令檢查清單:

launchctl print-disabled gui/$(id -u)

選項 B:把 plist 移走

mkdir -p ~/Library/LaunchAgents/Disabled
mv ~/Library/LaunchAgents/com.example.label.plist ~/Library/LaunchAgents/Disabled/

launchd 只讀取直接位於 LaunchAgents 檔案夾中的檔案,不讀取子檔案夾,所以下次登入時工作不會被載入。檔案仍在,需要時隨時可用。如果 App 重新建立 plist,工作就會回來;選項 A 可以避免這種情況。

選項 C:系統設定

許多工作也會出現在系統設定 › 一般 › 登入項目與延伸功能 › 允許在背景執行中。在那裡關閉開關也有效,但一個開關可能同時控制同一開發者的多個工作。請參閱「允許在背景執行」是什麼意思。

步驟 6:確認是否生效

launchctl list | grep com.example.label

沒有輸出代表它沒有被載入。為了保險起見,請重新開機後再執行一次。

復原

如果你使用了選項 A:

launchctl enable gui/$(id -u)/com.example.label
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.label.plist

如果你使用了選項 B,請把檔案移回原處,然後執行同一行 bootstrap 指令。常駐程式請加上 sudo,並用 system 取代 gui/$(id -u)。

網路上常見的舊指令

launchctl unload -w file.plist 和 launchctl load -w file.plist 仍然可用,但 Apple 將它們列為舊版指令。bootout、bootstrap、disable 和 enable 才是目前的指令,而且錯誤訊息也更清楚。

常見問題

刪除 LaunchAgents 中的檔案安全嗎?

停用比刪除更安全。刪除 plist 並不會停止已經載入的工作,而且如果之後需要,檔案也找不回來了。請使用 launchctl bootout 和 launchctl disable,或將檔案移到備份檔案夾。

我應該使用 launchctl unload -w 嗎?

它仍然可用,但 Apple 已將 load 和 unload 標示為舊版指令。在目前的 macOS 上,請用 launchctl bootout 停止工作,用 launchctl disable 讓它保持關閉。

我可以停用 /System/Library 中的 Apple 啟動代理程式嗎?

請不要這樣做。它們是 macOS 的一部分,檔案受到系統完整性保護,停用它們可能會導致 iCloud、Spotlight 或更新等功能失效。

如何復原 launchctl disable?

執行 launchctl enable gui/$(id -u)/<label>,然後以 plist 路徑執行 launchctl bootstrap gui/$(id -u),或是登出後再重新登入。

App 又把它的啟動代理程式放回來了,怎麼辦?

使用 launchctl disable。它停用的是標籤本身,所以即使 App 重新寫入 plist,它仍會保持關閉。同時也請關閉 App 本身的「登入時啟動」設定。