dpkg:错误:dpkg状态数据库被另一个进程锁定


68

我只是想知道是否有人可以告诉我这是什么意思:

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
reidsr@ubuntu:~$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
reidsr@ubuntu:~$ 

如何sudo dpkg --configure -a 手动运行?


这台机器重要吗,也就是说,您可以重新启动它吗?应该尽快解决这个问题
Huckle 2012年

Answers:


94

首轮:

lsof /var/lib/dpkg/lock

然后确保该进程未运行:

ps cax | grep PID

如果正在运行:

kill PID
#wait
kill -9 PID

确保过程完成:

ps cax | grep PID

然后删除锁定文件:

sudo rm /var/lib/dpkg/lock

让dpkg自行修复:

sudo dpkg --configure -a

之后你应该没事的:)


7
永远不要手动删除锁定文件。他们在那里是有原因的。请,仅将此作为最后的手段。首先,尝试使用程序包管理来识别并关闭其他应用程序。
gertvdijk

8
如果确实有一个进程在使用锁定文件,则最好杀死该进程,而不是仅仅删除锁定文件。您应该可以使用找到流程lsof /var/lib/dpkg/lock
安倍·沃克

安倍晋三为强+1。切勿在不终止所有具有打开文件描述符的进程的情况下删除锁文件。
Pooyan Khosravi 2015年

1
@ Xen2050 IMO新的答案增加了不必要的混乱。如果您认为可以自动执行相同操作的bash脚本可用,我将其编写为另一个答案。
Pooyan Khosravi 2015年

1
就目前而言,这绝对是最好的答案。是的,确保没有任何正在运行的进程拥有该锁非常重要。我已经检查过,没有任何运行,并且我需要知道如何删除旧锁。这个答案涵盖了所有基础。
Lambart 2015年

9

您不能同时运行多个软件包应用程序/命令/工具。有时,这意味着突触,apt-get或程序包更新工具正在背景中运行。只需关闭其他包装工具,或等待它们完成即可。dpkg将运行。


8

也可以尝试:

sudo apt-get install -f

要修复任何损坏的软件包:

固定; 尝试更正具有损坏依赖性的系统。与安装/删除一起使用时,此选项可以省略任何软件包,以允许APT推断出可能的解决方案。如果指定了软件包,则必须完全纠正问题。首次运行APT时,有时有时需要使用该选项。APT本身不允许破坏的软件包依赖关系存在于系统上。系统的依存关系结构可能损坏得需要手动干预(这通常意味着使用dselect(1)dpkg --remove消除某些有问题的软件包)。在某些情况下,将此选项与-m一起使用可能会产生错误。配置项:APT :: Get :: Fix-Broken。




0

如果升级过程中断(例如失去连接),可能会发生这种情况。您可以尝试使用屏幕作为root(sudo su)返回会话。

screen -r

0

这里有一些很好的答案,但只想添加一种非lsof方法来查找dpkg锁定用户

步骤1:找出谁在锁定dpkg:

选项#1:使用lsof(并非始终安装在计算机上)

lsof /var/lib/dpkg/lock

选项2:使用bash

for pid in $(ls /proc | egrep [0-9]+); do sudo ls -l /proc/$pid/fd 2>/dev/null | grep /var/lib/dpkg/lock && echo $pid; done

步骤2:决定您要对当前dpkg用户执行的操作

如果没有这样的过程,则没有什么可决定的,只需跳到下一步。

否则,您必须决定是要终止该进程还是让它正常运行。如果您决定杀死它,请使用kill <pid>。如果该过程仍然无法结束,您可以考虑使用杀死它kill -9 <pid>,但是它可能会导致某些不一致之处,因此我建议您不要这样做,除非您知道自己在做什么。

步骤3:删除锁定文件

sudo rm /var/lib/dpkg/lock

步骤4:修复dpkg内部状态

sudo dpkg --configure -a


0

在我们的情况下,没有正在运行的进程(PID),因此我硬停止并重新启动了VPS。

接下来,有几个锁文件可能需要删除:

sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock

然后,您可以dpkg按照建议进行修复:

sudo apt update
sudo dpkg --configure -a
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.