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

yum 进程锁定

  •  
  •   Dffcc · 2024-03-05 14:01:48 +08:00 · 2394 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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