在管理 CentOS 服务器的日常工作中,yum(Yellowdog Updater, Modified)无疑是每一位系统管理员最亲密的伙伴之一,它负责软件包的安装、更新和卸载,是维持系统健康与安全的核心工具,正如任何强大的工具一样,yum 有时也会变得“不听话”,可能因为网络中断、仓库源问题、复杂的依赖关系冲突或仅仅是进程卡死,而长时间停留在某个步骤,无法继续也无法退出,了解如何安全、有效地终止一个 yum 进程就显得至关重要,本文将系统地介绍在不同场景下 centos怎么终止yum,从最温和的方法到最后的强制手段,并提供问题排查与预防的建议。

常规中断:使用 Ctrl+C
当您在前台直接运行 yum 命令(yum update)时,如果发现进程卡住或想中止操作,最简单、最安全的第一步是尝试使用组合键 Ctrl+C。
- 工作原理:这个组合键会向前台进程发送一个 
SIGINT(中断信号)信号。yum进程在接收到这个信号后,通常会尝试执行清理操作,- 删除已下载但不完整的软件包。
 - 释放它所持有的 
yum锁文件。 - 回滚未完成的安装或更新事务。
 
 - 使用场景:适用于在终端中直接运行的 
yum进程,且进程仍然对输入有响应。 - 操作方法:直接在运行 
yum命令的终端窗口中按下Ctrl和C键。 
这是终止 yum 的首选方法,因为它尽可能地保持了系统的稳定性和数据的一致性。
进程无响应:查找并 kill 进程
Ctrl+C 无法生效,或者 yum 进程是在后台运行的(例如通过 nohup 或 & 启动),您就需要手动找到并终止它。
查找 yum 进程ID (PID)
需要找到 yum 进程的唯一标识符(PID),可以使用以下两个常用命令:
- 
使用
ps和grep:ps aux | grep yum
这个命令会列出所有正在运行的进程,并通过
grep筛选出包含yum关键字的行,您需要关注的是第二列的数字,即 PID。 - 
使用
pgrep:pgrep -f yum
这个命令更直接,它会直接显示所有与
yum相关的进程的 PID。 
终止进程:kill 命令的两种级别
找到 PID 后,可以使用 kill 命令来终止进程。kill 命令可以发送不同类型的信号,其中最常用的是 SIGTERM 和 SIGKILL。
- 
温和终止(推荐首选):
kill <PID>
或者明确指定信号:

kill -15 <PID>
这会发送一个
SIGTERM(终止信号)信号,它相当于一个礼貌的“请求”,要求进程自行退出。yum进程在收到这个信号后,通常会像收到Ctrl+C一样,尝试进行清理工作然后退出,这是kill命令的默认行为,也是应该首先尝试的方法。 - 
强制终止(最后手段):
kill -9 <PID>
这会发送一个
SIGKILL(杀死信号)信号,这是一个“不可阻挡”的信号,它会立即终止进程,不给进程任何执行清理操作的机会。警告:使用
kill -9是有风险的,因为它强制中断,可能会导致yum的数据库或 RPM 数据库处于不一致的状态,例如留下未完成的安装事务或损坏的锁文件,只有在kill -15无效,且您确定进程已完全卡死的情况下,才应考虑使用此方法。 
处理“锁文件”问题
有时,即使 yum 进程已经被终止,当您再次尝试运行 yum 时,可能会遇到类似以下的错误:
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum
Memory :  22 M RSS (400 MB VSZ)
这表明 yum 的锁文件没有被正确释放。yum 在运行时会创建一个锁文件(通常位于 /var/run/yum.pid),以防止多个 yum 实例同时运行而破坏系统。
解决步骤:
- 
再次确认进程:运行
ps aux | grep yum或pgrep -f yum,确保没有任何残留的yum进程在运行,如果还有,请用kill命令结束它。 - 
手动删除锁文件:如果确认没有
yum进程在运行,但锁文件依然存在,这意味着是前一次异常退出(如kill -9或系统崩溃)导致的,您可以安全地手动删除这个锁文件:rm -f /var/run/yum.pid
删除后,您就可以重新运行
yum命令了。 
终极手段:清理与重建数据库
如果经历了以上所有步骤,yum 仍然行为异常,例如频繁卡死或报错,可能是其缓存数据或底层的 RPM 数据库已损坏,此时可以采取更深层次的修复措施。

- 
清理所有缓存:
yum clean all
这个命令会清除
yum下载的软件包、旧的头文件和缓存数据,是一个安全且常用的清理操作。 - 
重建 RPM 数据库: 如果问题依旧,可能是 RPM 数据库本身出了问题,重建数据库可以解决很多棘手的依赖和锁定问题。
rpm --rebuilddb
这个命令会读取已安装的所有软件包信息,并重新构建 RPM 数据库,这个过程可能需要几分钟时间,具体取决于系统上安装的软件包数量,操作完成后,
yum的行为通常会恢复正常。 
下表清晰地小编总结了在不同情况下终止 yum 的方法和顺序:
| 场景 | 推荐方法 | 命令 | 备注 | 
|---|---|---|---|
| 前台运行,进程有响应 | 温和中断 | Ctrl+C | 
首选方法,安全可靠 | 
前台或后台运行,Ctrl+C无效 | 
找到PID并温和终止 | pgrep -f yum kill <PID> | 
优先尝试,给进程清理的机会 | 
| 温和终止无效,进程完全卡死 | 强制终止 | pgrep -f yum kill -9 <PID> | 
最后手段,可能导致数据库不一致 | 
进程已终止,但yum仍被锁定 | 
删除锁文件 | rm -f /var/run/yum.pid | 
确保没有其他yum进程在运行 | 
yum持续异常或报错 | 
清理缓存和重建数据库 | yum clean all 和 rpm --rebuilddb | 
解决深层次的数据库损坏问题 | 
相关问答FAQs
问题1:我错误地使用了 kill -9 终止了 yum,现在再运行任何 yum 命令都报错,提示数据库损坏,该怎么办?
解答:这是 kill -9 可能导致的典型后果。yum 在进行事务时,其底层的 RPM 数据库处于一个“中间”状态,强制中断会破坏其完整性,解决方法如下:
- 按照前文所述,检查并删除可能残留的锁文件 
rm -f /var/run/yum.pid。 - 执行 
rpm --rebuilddb命令来重建 RPM 数据库,这个命令会扫描系统中所有已安装的 RPM 包,并根据这些信息重新生成一个完整、一致的数据库。 - 重建完成后,再运行 
yum clean all清理掉可能不完整的缓存。 执行完这两步后,yum的功能通常就能恢复正常了。 
问题2:为什么我的 yum 经常会在下载或更新过程中卡住,有什么预防措施吗?
解答:yum 卡住通常由以下几个原因导致,可以采取相应措施进行预防:
- 网络不稳定:这是最常见的原因,如果您的服务器网络连接质量不佳,尤其是在下载大体积的更新包时,很容易中断,确保服务器拥有稳定可靠的网络连接是根本。
 - 仓库源(Repository)问题:您使用的 
yum源服务器可能响应慢、负载高或暂时不可用,可以尝试更换为更稳定、速度更快的镜像源(使用阿里云、腾讯云等提供的国内镜像源)。 - 依赖关系冲突:在安装或更新某些软件包时,可能会遇到复杂的依赖冲突导致 
yum卡在计算依赖关系的步骤,定期执行yum update,避免积攒大量更新,可以减少此类冲突的概率,尽量使用官方或信誉良好的第三方源。 - 系统资源不足:如果服务器的内存或 CPU 资源被其他进程耗尽,
yum也可能因为无法获得足够资源而变得缓慢或无响应,使用top或htop等工具监控系统资源,确保有足够的可用资源供yum运行。