我做了:
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
我懂了:
Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock. It is held by process 1131 (packagekitd)
N: Be aware that removing the lock file is not a solution and may break your system.
E: Unable to lock directory /var/lib/apt/lists/
Run Code Online (Sandbox Code Playgroud)
我曾经只是删除锁定文件,但我以前从未见过该注释(它是否破坏了我的系统?)?
我该怎么办?
Arc*_*ahi 19
只有当您确定没有正在进行的软件安装或更新时,才重新启动计算机,锁定将被解除。请注意,在运行更新期间重新启动计算机可能会破坏您的系统。
如果重新启动没有帮助:尝试重新启动packagekit服务。重启的终端命令packagekit是:
sudo service packagekit restart
Run Code Online (Sandbox Code Playgroud)
更多详细信息 -
这意味着dpkg(或apt) 要么被中断,要么仍在后台运行。
如果您正在更新或安装某些软件,请等待完成。正如评论中提到的,packagekitd 的使用表明 GUI 前端确实正在运行更新或检查更新。
手动删除锁文件是不安全的,其他答案解释了如何安全地做到这一点。重新启动计算机会自动删除旧的锁定文件,这是摆脱该问题的最简单方法之一。
锁定文件是由process 1131 (packagekitd). 创建它是为了使该进程可以对包系统进行更改,而不必担心其他程序同时进行其他更改。
如果删除锁定文件,则可以让另一个进程(例如 )apt-get与packagekitd. 由于没有锁定文件,apt-get还将假定它是进行更改的唯一进程。
结果可能是一个进程所做的某些更改可能会被另一个进程覆盖。最终结果将是两个更改集的某种随机混合,这可能会导致系统崩溃。
这是可能的写程序,使他们能够在同一时间工作,而踩着对方的脚趾,但它是困难的,可以给一些真正不明显的错误。这个包系统的作者认为最好只制作一个全局锁文件。这简单而强大,但对多任务处理者不太友好。
现在,所有这些都假设packagekitd仍在运行和做事。如果这个进程实际上在没有删除锁文件的情况下崩溃了,情况就不同了。
这可能已经离开了系统中的“半途而废”的状态,但包装系统的设计,检测,并从该恢复。(这更容易)
重新启动是确保packagekitd不再运行的一种非常严厉的方式。在启动期间,旧的锁定文件将被删除,因为它们不再相关。
如果您 100% 确定进程已崩溃,则无需重新启动即可删除锁定文件。使用ps检查过程1131仍然存在。
如果您相当确定该过程以某种方式卡住并且永远不会结束,那么您可以kill安全地进行。如果您认为它可能按预期工作,但只是在不方便的时候,最好等到它完成。如果这是不可能的,您仍然可以安全地杀死它。
| 归档时间: |
|
| 查看次数: |
7798 次 |
| 最近记录: |