Files
StudyDiary/60-Imports/64-AI/macOS 取消_停止_彻底删除后台服务(launchctl).md
T

143 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# macOS 取消/停止/彻底删除后台服务(launchctl)
# macOS 取消 / 停止 / 彻底删除后台服务(launchctl)
macOS 的后台服务分两类:
1. **LaunchAgent 用户服务**:仅当前登录用户运行,路径 `~/Library/LaunchAgents/`
2. **LaunchDaemon 系统服务**:开机就运行、所有用户生效,路径 `/Library/LaunchDaemons/`
> ⚠️ 禁止修改 `/System/Library/` 下系统自带服务(com\.apple\.\*),会系统崩溃。
>
>
## 一、先找到目标服务(必做第一步)
### 1\. 列出所有运行中的服务
```bash
# 全部服务
launchctl list
# 过滤指定软件(替换 iscsictl/zerotier/xxx)
launchctl list | grep -i iscsi
```
输出第一列是 PID(有数字代表正在运行),第三列是**服务 label**(如 `com.iscsi.iscsid`)。
### 2\. 查找服务 plist 配置文件
```bash
# 全局搜索iscsi相关plist
find /Library ~/Library -name "*iscsi*.plist"
```
## 二、3 种操作力度:临时停止 / 永久禁用 / 彻底删除
### 方式 1:临时停止当前运行的服务(重启后恢复)
```bash
# 格式 launchctl stop 服务label
launchctl stop com.iscsi.iscsid
```
### 方式 2:永久禁用(不删除文件,重启也不会自启,推荐临时取消)
#### 旧版命令 unload \-w(兼容所有 macOS)
```bash
# 用户级Agent(无需sudo)
launchctl unload -w ~/Library/LaunchAgents/xxx.plist
# 系统级Daemon(必须sudo)
sudo launchctl unload -w /Library/LaunchDaemons/com.iscsi.iscsid.plist
```
`-w` = write,写入禁用标记,永久不开机自启。
#### 新版 macOS 10\.11\+ 标准命令 disable
```bash
# 用户服务禁用
launchctl disable gui/$(id -u)/com.iscsi.iscsid
# 系统服务禁用
sudo launchctl disable system/com.iscsi.iscsid
```
恢复启用把 `disable` 改成 `enable` 即可。
### 方式 3:彻底取消 \+ 删除服务(完全清除,再也不会启动)
完整流程(以 iscsi 服务举例):
1. 停止运行
```bash
sudo launchctl stop com.iscsi.iscsid
```
2. 从系统服务列表移除
```bash
sudo launchctl bootout system /Library/LaunchDaemons/com.iscsi.iscsid.plist
# 用户服务用这条:
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/xxx.plist
```
3. 删除硬盘上的配置文件(根治)
```bash
# 系统服务
sudo rm -f /Library/LaunchDaemons/com.iscsi.iscsid.plist
# 用户服务
rm -f ~/Library/LaunchAgents/xxx.plist
```
4. 强制杀掉残留进程
```bash
pkill -f iscsid
```
## 三、针对你之前 iSCSI iscsictl 服务实操示例
```bash
# 1. 查看iscsi服务
launchctl list | grep iscsi
# 2. 临时停止
sudo launchctl stop com.iscsi.iscsid
# 3. 永久禁用开机自启
sudo launchctl unload -w /Library/LaunchDaemons/com.iscsi.iscsid.plist
# 4. 彻底删除服务(不再使用iSCSI时执行)
sudo launchctl bootout system /Library/LaunchDaemons/com.iscsi.iscsid.plist
sudo rm -f /Library/LaunchDaemons/com.iscsi.iscsid.plist
pkill -f iscsid
```
## 四、常见问题
1. **文件无法删除 Operation not permitted**
文件加了系统锁定 `schg`,先解锁:
```bash
sudo chflags noschg /xxx/xxx.plist
```
再执行删除命令。
2. **stop 后立刻自动重启**
说明只停止没卸载,必须执行 `unload -w` 或 `bootout` 取消自启。
3. **提示 could not find specified service**
plist 路径写错,先用 `find` 命令确认文件真实路径。
## 快速总结
- 只想临时关掉:`launchctl stop label`
- 永久不开机自启(保留文件):`unload -w` / `launchctl disable`
- 彻底删除服务(完全取消):`bootout` \+ `rm plist` \+ 杀进程
> (注:部分内容可能由 AI 生成)