我只是想知道是否有人可以告诉我这是什么意思:
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
手动运行?
答案1
第一次运行:
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
之后你应该会没事的:)
答案2
在我们的例子中,没有正在运行的进程(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
答案3
你也可以尝试:
sudo apt-get install -f
修复任何损坏的软件包:
修复;尝试纠正存在损坏依赖关系的系统。此选项与 install/remove 一起使用时,可以忽略任何软件包,以允许 APT 推断出可能的解决方案。如果指定了软件包,则这些软件包必须完全纠正问题。第一次运行 APT 时,此选项有时是必要的;APT 本身不允许损坏的软件包依赖关系存在于系统中。系统的依赖结构可能已损坏,需要手动干预(这通常意味着使用
dselect(1)
或dpkg --remove
消除一些有问题的软件包)。在某些情况下,将此选项与 -m 一起使用可能会产生错误。配置项:APT::Get::Fix-Broken。
答案4
这里有一些很好的答案,但只是想添加一种非 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