143 lines
3.6 KiB
Markdown
143 lines
3.6 KiB
Markdown
# 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 生成)
|