# Mac 上的 LaunchAgents 和 LaunchDaemons 是什麼，哪些可以刪

> 這幾個 launchd 資料夾裡放什麼、判斷之前怎麼讀 plist、怎麼安全地停掉並移除殘留的任務，以及哪些資料夾不要碰。

Published: 2026-11-07 | Updated: 2026-11-09

LaunchAgents 和 LaunchDaemons 是放著許多小型 `.plist` 檔案的資料夾，用來告訴 macOS 的 `launchd` 要在背景啟動什麼、什麼時候啟動。Agent 為單一登入的使用者執行，可以在畫面上顯示東西，Daemon 為整個系統執行，沒有使用者介面。通常可以移除你已經不用的 App 留下的第三方項目，`/System/Library` 不要動，搬動檔案之前要先停掉對應的任務。

## 五個資料夾

Apple 的 [launchd 說明](https://support.apple.com/guide/terminal/apdc6c1077b-5d5d-4d35-9c19-60f2397b2369/mac)列出了這些位置：

| 資料夾 | 放什麼 | 能不能動 |
| --- | --- | --- |
| `~/Library/LaunchAgents` | 只屬於你帳號的第三方 Agent | 可以，要小心 |
| `/Library/LaunchAgents` | 所有使用者共用的第三方 Agent | 可以，需要管理員密碼 |
| `/Library/LaunchDaemons` | 第三方的系統 Daemon | 可以，需要管理員密碼 |
| `/System/Library/LaunchAgents` | Apple 的 Agent | 不要 |
| `/System/Library/LaunchDaemons` | Apple 的 Daemon | 不要 |

`man launchd` 劃出了界線：Daemon 是整個系統共用的服務，所有用戶端共用一個執行個體，而且不該顯示使用者介面。Agent 則是每位使用者各跑一份，需要和使用者互動的工作應該放在這裡。實際上，選單列的輔助程式或更新程式多半是 Agent，VPN 服務、音訊驅動的輔助程式或備份引擎多半是 Daemon。

不是每個背景項目在這裡都有檔案。App 可以把 plist 放在自己的 bundle 裡面，所以 **系統設定 › 一般 › 登入項目與延伸功能**可能列出這些資料夾裡沒有的東西。[如何停止 App 在開機時自動開啟](https://mole.fit/tw/blog/how-to-disable-startup-programs-on-mac)會說明那個畫面。

## 判斷之前先讀一遍

```bash
ls -la ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
plutil -p ~/Library/LaunchAgents/com.example.helper.plist
```

有四個鍵，就能看出大半的來龍去脈：

| 鍵 | 意義 |
| --- | --- |
| `Label` | 任務的名稱，`launchctl` 用的就是這個 |
| `Program` 或 `ProgramArguments` | 它要執行什麼，要檢查的就是這個路徑 |
| `RunAtLoad` | 任務一載入就啟動，通常是在登入或開機時 |
| `KeepAlive` | 它停止後 `launchd` 會再把它啟動，所以手動結束沒有用 |

上面的 `com.example.helper` 只是示範用的名稱，請換成你自己檔案的名稱。如果 `ProgramArguments` 指向你已經移除的 App，那個檔案就是殘留，可以放心拿掉。如果它指向你還在用的 App，移除它可能讓那個 App 的更新、同步、授權、VPN 或音訊壞掉。

## 怎麼移除

先停掉任務。把檔案搬走並不會停掉已經在跑的任務，它會一直載入到登出或重新開機。

你帳號裡的 Agent：

```bash
launchctl bootout gui/$(id -u)/com.example.helper
mv ~/Library/LaunchAgents/com.example.helper.plist ~/.Trash/
```

`/Library/LaunchDaemons` 裡的 Daemon：

```bash
sudo launchctl bootout system/com.example.helper
sudo mv /Library/LaunchDaemons/com.example.helper.plist ~/.Trash/
```

`/Library/LaunchAgents` 裡的 Agent 會載入到每位使用者的工作階段，所以用 `gui/$(id -u)/` 的形式來停止它，並用 `sudo mv` 搬動檔案。指令裡請使用 `Label` 的值，它可能和檔名不同。

用 `launchctl print gui/$(id -u)/com.example.helper` 或 `sudo launchctl print system/com.example.helper` 確認它已經不在了，應該會回報找不到這個服務。然後正常使用那個 App 一天，如果有東西壞了，就把檔案放回去再重新開機。

如果想保留檔案，只是不讓任務載入：

```bash
launchctl disable gui/$(id -u)/com.example.helper
launchctl print-disabled gui/$(id -u)
```

用同一個目標執行 `launchctl enable` 就能還原。

## 不要這樣做

- 不要動 `/System/Library/LaunchAgents` 或 `/System/Library/LaunchDaemons`，它們放在唯讀的系統磁碟區上，屬於 macOS。
- 不要只憑公司名稱就刪。以資安產品或裝置驅動程式命名的檔案，可能正是該產品能正常運作的關鍵，在受管理的 Mac 上也可能是公司政策。
- 不要移除你還在用的 App 的 plist，還以為只會少掉更新提醒。先看 App 自己的設定。
- 不要用舊教學裡寫的 `launchctl unload`，Apple 的手冊把它列為舊式子指令，現在的寫法是 `bootout`。

## Mole 能幫上什麼

[Mole](https://mole.fit/tw/) 的**軟體**分頁有個**啟動項目**區段，會列出這些項目，讀取每個 plist 自己的 `Label`，並用擁有它的 App 來命名輔助程式。它會把項目分到**登入項目**和**背景服務**這類標題下，當某個任務指向已不存在的東西時，標示**程式缺失**，這通常就是殘留的徵兆。對於 `~/Library/LaunchAgents`、`/Library/LaunchAgents` 或 `/Library/LaunchDaemons` 裡經過檢查的 launchd plist，你可以用該列的開關把它關掉、再打開，或移到垃圾桶，Mole 會先停掉任務。資安和管理類產品會維持鎖定，無法安全更改的項目則會開啟系統設定。當**狀態**裡有個行程看起來陌生時，**為什麼在執行？**會指出 launchd 服務和它的 plist。透過 Mole 解除安裝 App 時，也會讓你一併檢視它的啟動項目。

## 常見問題

### 刪除 LaunchAgents 裡的檔案安全嗎？

對已移除 App 留下的殘留是安全的，對你還在用的 App 有時就不安全。先用 `plutil -p` 讀 `ProgramArguments`，並在把檔案移到垃圾桶之前，先用 `launchctl bootout` 停掉任務，這樣才放得回去。

### LaunchAgent 和 LaunchDaemon 有什麼差別？

Agent 為每位登入的使用者執行，可以和該使用者互動。Daemon 在整個系統只有一個執行個體，通常在任何人登入之前就啟動，沒有使用者介面。

### 為什麼移除的 LaunchAgent 又回來了？

安裝它的 App 還在這台 Mac 上，下次開啟或更新時又把它寫回去了。要在 App 裡關掉那個功能，或解除安裝 App，只刪檔案撐不久。

### LaunchAgent 可能是惡意軟體嗎？

可能。常駐的廣告軟體常裝在這裡，因為這樣重新開機後還能存活。`Label` 看不懂，又執行隱藏資料夾或暫存路徑裡的東西，就值得多看一眼，搜尋那個確切的路徑，並檢查程式是誰簽署的。

### 移除之後需要重新開機嗎？

如果你用了 `launchctl bootout` 就不需要，它會立刻停掉。如果只是搬走檔案，任務會一直載入到你登出或重新開機。

---

Canonical HTML page: https://mole.fit/tw/blog/launchagents-launchdaemons-mac
Blog index for agents: https://mole.fit/tw/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
