如何在Mac OS X中禁用无法终止的守护进程/服务?解决kill -9后进程重启问题
MacOS进程kill -9后自动重启?教你禁用顽固守护进程
当你用kill -9 <PID>杀死进程后它立刻重启,本质是因为这个进程是MacOS系统服务管理器launchd托管的守护进程/服务——launchd会持续监控这类进程,一旦检测到进程退出就自动重启,保证服务可用性。下面是具体解决方法:
一、先定位进程对应的服务配置
首先得找到目标进程所属的launchd配置文件:
- 用PID查进程名:
ps -p <你的PID> -o comm= - 根据进程名查找对应的plist配置文件:
比如进程名是# 查找系统级服务(开机即启动) find /Library/LaunchDaemons /System/Library/LaunchDaemons -name "*<进程名关键字>*" # 查找用户级服务(登录后启动) find ~/Library/LaunchAgents /Library/LaunchAgents -name "*<进程名关键字>*"cloudsync,就把<进程名关键字>换成cloudsync。
二、临时禁用服务(重启后恢复)
不同MacOS版本的命令有差异:
1. macOS Big Sur及以后版本
用launchctl bootout停止服务:
- 系统级服务(需要sudo权限):
sudo launchctl bootout system/<服务标识符> # 示例:sudo launchctl bootout system/com.company.cloudsync - 用户级服务:
服务标识符就是plist文件名去掉launchctl bootout gui/$UID/<服务标识符>.plist后缀的部分。
2. macOS Catalina及更早版本
用launchctl unload停止服务:
- 系统级服务:
sudo launchctl unload /Library/LaunchDaemons/<服务名>.plist - 用户级服务:
去掉launchctl unload ~/Library/LaunchAgents/<服务名>.plist-w参数就是临时禁用,重启后服务会自动恢复。
三、永久禁用服务(重启后仍保持禁用)
方法1:用launchctl disable命令(推荐,Big Sur及以后)
这是最安全的永久禁用方式:
- 系统级服务:
sudo launchctl disable system/<服务标识符> - 用户级服务:
想要恢复服务,把launchctl disable gui/$UID/<服务标识符>disable换成enable即可。
方法2:移除配置文件(彻底清除)
如果不想保留服务的配置文件,可先停止服务,再将plist文件移到备份目录(比删除更安全):
# 先停止服务 sudo launchctl bootout system/<服务标识符> # 移动到自定义备份目录 sudo mkdir -p ~/ServiceBackups sudo mv /Library/LaunchDaemons/<服务名>.plist ~/ServiceBackups/
⚠️ 注意:/System/Library/LaunchDaemons下的是系统核心服务,禁止删除或修改,否则可能导致系统崩溃。
四、第三方软件服务的特殊处理
如果是第三方软件自带的顽固服务,除了上面的方法,还可以:
- 打开软件的偏好设置,找「开机启动」「后台运行」开关直接关闭
- 用软件自带的卸载工具彻底卸载,连带移除相关服务配置
五、验证禁用是否成功
执行以下命令确认服务已停止且不会重启:
# 查看服务状态,无输出则说明已禁用 launchctl list | grep <服务标识符> # 检查进程是否存在,无输出则说明进程已终止 pgrep <进程名>
内容的提问来源于stack exchange,提问作者Hermann Schwarz
相关产品推荐
相关产品推荐

