yum 进程锁定

292 天前
 Dffcc

出现原因:   yum 命令一次只能安装一个软件,所以当下载安装第二个软件包时,系统进程锁会锁定 yum ,这时,即使关闭进程甚至关闭虚拟机重启后,再执行 yum 命令还是会出现同样情况。

解决方法: 需要在 root 用户下,强制采用 rm -f /var/run/yum.pid 命令关闭 yum 进程

rm -f /var/run/yum.pid ————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                    

原文链接: https://blog.csdn.net/weixin_44589991/article/details/114917045

为甚麽按 ctrl+c 跟 ctrl+z ,无法解除 yum 进程锁定? 而一定要利用 rm 删除某个档案,有甚么方法可避免 yum 进程锁定的发生?

2291 次点击
所在节点    Linux
22 条回复
jdxia
292 天前
你这样删掉的话, 那 2 个 yum 进程同时修改一个软件包的话怎么办?
vcn8yjOogEL
292 天前
目前没有支持并行安装的非容器包管理器吧, dpkg 也会上锁的, 一次指定所有包让它一个一个装就可以了
yanqiyu
292 天前
> 为甚麽按 ctrl+c 跟 ctrl+z ,无法解除 yum 进程锁定
理论上 yum 退出会正确的清理 pid 文件才对(但是是 sigkill/断电/crash 掉了的情况 yum 肯定没机会清理),就算没能清理,下一个 yum 启动的时候也会检查对应的 pid 是否是正在运行的进程,如果 pid 对应正在运行的进程就会等它退出。

所以出问题的情况就是 yum 没正常退出导致 pid 文件没清理( bug ),然后 pid 文件记载的 pid 恰好被别的进程用了,判断逻辑搞不清楚究竟是不是有正在进行的事务于是放弃了(巧合)。

> 有甚么方法可避免 yum 进程锁定的发生?
改源码,做掉整个 lock 机制然后责任自负(同时两个包管理同时跑可能把系统或者包管理元数据搞坏,这个 lock 就是保证用户不能这么干)
或者给它改成用 flock 这样的机制来锁,这样子就会避免 pid 回收/恰好重启后 pid 被用了的巧合

其实我很好奇为什么 yum 不一开始就用 flock 之类的东西来做锁...
hai046
292 天前
我以前刚接触 centos 时候干过,看人家 bolg yum 更新了 core ,然后我强制停止,我也这样操作,后来在重写安装其他的,但是悲哀的是前面安装一般导致版本冲突,把系统搞崩溃了 😄

yum 设计就是单独更新,避免冲突的
wangkun025
292 天前
我也觉得锁定是有原因,从未考虑过解除这个限制。
Still4
292 天前
这其实并不能算作一个问题吧,系统设计成线性更新,我猜是防止安装不同包依赖了相同库的不同版本产生问题,当你尝试突破限制非要同时更新两个包,是系统的问题还是使用者的问题呢

至于为什么重启无法解锁,删除 pid 文件反而能解锁,可能是因为有其他锁的存在,删除 pid 可能会触发移除锁,而重启不会触发,猜的对不对要看源码才知道了
fuis
292 天前
yum 这种连 sigint 都处理不好的软件就不要用了吧,用 dnf 好了。关于加锁的问题,几乎每一个软体包管理都需要这个机制。
Still4
292 天前
按理说安装过程中 ctrl + c ,肯定是允许取消安装的,锁是需要释放的,如果不会释放那就是设计问题了
yanqiyu
292 天前
@fuis
@Still4
至少 yum-3.4.3-168.el7.centos.noarch 是能正确处理 sigint 的,所以留了个 pid 文件大概是别的原因

#6 > 可能是因为有其他锁的存在
问题不是锁,问题是判断锁是否有效的机制太简单了,就是看看 pid 文件里面的 pid 是不是对应正在运行的进程,这东西容易出现巧合。
要是一开始就用锁反倒不会出现重启之后还不能 yum 的问题( flock 之类的肯定重启就释放了)
Dffcc
292 天前
我是小白,都听不太懂,建议要补强哪边的知识点?
GooMS
292 天前
file lock
cnbatch
292 天前
不知道是不是旧版系统的 bug ,至少最新版 Fedora 不存在这种事,随时可以中断,中断后锁自动释放。

最保险的做法应当是一次性安装需要的软件包,或者等到上一个 yum 完成了再运行下一个 yum 。
sky96111
292 天前
@cnbatch Fedora 的 yum 是 dnf 的别名。ctrl+c 是可以正常释放锁的,ctrl+z 是挂起而不是终止,所以锁不会释放。
我没有接触过太老的 yum ,猜测可能 yum 不能很好地处理 sigint 导致终止锁不释放?
现实中遇到的非正常锁定都是使用者习惯不佳导致的(安装更新时强制关机、更新卡住时按 ctrl+z 而不是 ctrl+c )
lasuar
292 天前
有点类似并发控制。解除后,如果两个安装线程同时修改了同一个目录, 甚至修改同一个文件,这就可能出现文件系统的报错,或者不报错但把文件改坏了(这就不好恢复了,因为你不知道原来长啥样),改坏文件可能导致一些原本内置的软件或工具无法正常运行,进而可能导致系统不稳定,比起这种严重的后果,不如限制同一时间只能执行一个安装操作。
hefish
291 天前
估计是老版本的 centos 或者 fedora ,OP 也没讲,所以是盲猜。
Dffcc
291 天前
@hefish CentOS7
hefish
291 天前
估计还开了图形界面吧。。。
Dffcc
291 天前
@hefish 没开,是最小化版本
julyclyde
288 天前
你要是问“为什么 ctrl+C 无法”还算有点道理
但是居然“为什么 ctrl+z 无法”这种问题你都问的出来?
Dffcc
288 天前
@sky96111 不懂这个地方,安装更新时强制关机、更新卡住时按 ctrl+z ,ctrl z 应该是暂停,这种时候应该要按 ctrl c?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1020771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX