V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Dffcc
V2EX  ›  Linux

yum 进程锁定

  •  
  •   Dffcc · 250 天前 · 2239 次点击
    这是一个创建于 250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出现原因:   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 进程锁定的发生?

    22 条回复    2024-03-09 16:54:08 +08:00
    jdxia
        1
    jdxia  
       250 天前
    你这样删掉的话, 那 2 个 yum 进程同时修改一个软件包的话怎么办?
    vcn8yjOogEL
        2
    vcn8yjOogEL  
       250 天前
    目前没有支持并行安装的非容器包管理器吧, dpkg 也会上锁的, 一次指定所有包让它一个一个装就可以了
    yanqiyu
        3
    yanqiyu  
       250 天前
    > 为甚麽按 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
        4
    hai046  
       250 天前
    我以前刚接触 centos 时候干过,看人家 bolg yum 更新了 core ,然后我强制停止,我也这样操作,后来在重写安装其他的,但是悲哀的是前面安装一般导致版本冲突,把系统搞崩溃了 😄

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

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

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

    最保险的做法应当是一次性安装需要的软件包,或者等到上一个 yum 完成了再运行下一个 yum 。
    sky96111
        13
    sky96111  
       249 天前 via Android
    @cnbatch Fedora 的 yum 是 dnf 的别名。ctrl+c 是可以正常释放锁的,ctrl+z 是挂起而不是终止,所以锁不会释放。
    我没有接触过太老的 yum ,猜测可能 yum 不能很好地处理 sigint 导致终止锁不释放?
    现实中遇到的非正常锁定都是使用者习惯不佳导致的(安装更新时强制关机、更新卡住时按 ctrl+z 而不是 ctrl+c )
    lasuar
        14
    lasuar  
       249 天前
    有点类似并发控制。解除后,如果两个安装线程同时修改了同一个目录, 甚至修改同一个文件,这就可能出现文件系统的报错,或者不报错但把文件改坏了(这就不好恢复了,因为你不知道原来长啥样),改坏文件可能导致一些原本内置的软件或工具无法正常运行,进而可能导致系统不稳定,比起这种严重的后果,不如限制同一时间只能执行一个安装操作。
    hefish
        15
    hefish  
       249 天前
    估计是老版本的 centos 或者 fedora ,OP 也没讲,所以是盲猜。
    Dffcc
        16
    Dffcc  
    OP
       249 天前 via iPhone
    @hefish CentOS7
    hefish
        17
    hefish  
       249 天前
    估计还开了图形界面吧。。。
    Dffcc
        18
    Dffcc  
    OP
       249 天前 via iPhone
    @hefish 没开,是最小化版本
    julyclyde
        19
    julyclyde  
       246 天前
    你要是问“为什么 ctrl+C 无法”还算有点道理
    但是居然“为什么 ctrl+z 无法”这种问题你都问的出来?
    Dffcc
        20
    Dffcc  
    OP
       245 天前 via iPhone
    @sky96111 不懂这个地方,安装更新时强制关机、更新卡住时按 ctrl+z ,ctrl z 应该是暂停,这种时候应该要按 ctrl c?
    sky96111
        21
    sky96111  
       245 天前
    @Dffcc #18 想终止就按 ctrl+c ,想暂停就按 ctrl+z 。暂停了锁不会释放,想继续的时候用 fg 把任务拉回前台继续安装,正常安装结束后锁就会释放了
    Dffcc
        22
    Dffcc  
    OP
       245 天前 via iPhone
    @sky96111 好,谢谢你🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2744 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:41 · PVG 15:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.