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

143 lines
3.6 KiB
Markdown
Raw Permalink Normal View History

2026-10-09 22:06:40 +08:00
# 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 生成)