当前位置: 首页>>技术教程>>正文


无法锁定管理目录(/var/lib/dpkg/)是另一个使用它的进程吗?

, , ,

问题描述

尝试使用apt-get时出现此错误:

E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?  

我怎样才能解决这个问题?

最佳解决方案

这应该是最后的手段。如果您不小心使用它,则可能会导致系统损坏。在此之前请尝试other answers first

您可以使用以下命令删除锁定文件:

sudo rm /var/lib/apt/lists/lock

您可能还需要删除缓存目录中的锁定文件

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

之后,再次尝试打开Synaptic。

次佳解决方案

我看到几乎所有的答案都建议删除锁。我不建议这样做,作为第一个措施;也许如果没有其他选择。当apt进程正在运行时,将放置该锁并在进程完成时将其移除。如果有没有明显的进程运行的锁,这可能意味着进程因某种原因卡住了。

如果你试试

ps aux | grep apt

那将会捕获至少包含单词apt的进程。如果您看到apt-get进程或aptitude进程出现卡住,您可以尝试

kill processnumber

如果这不起作用

kill -9 processnumber

这应该杀死进程并可能会删除该锁。杀死aptaptitude进程是无害的,除非它实际上处于软件包安装过程中。无论如何,如果这个过程陷入困境,你可能没有选择,只能杀死它。

直接杀死dpkg进程(如果存在)不是一个好主意,因为如果dpkg处于活动状态,则可能操纵程序包数据库,而杀死程序包可能会使程序包数据库处于不一致状态;即损坏。

杀死apt-getaptitude过程通常更安全。

第三种解决方案

删除您的/var/lib/dpkg/lock文件并强制重新配置程序包。

sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a

它应该在此之后工作。

第四种方案

如果您在执行apt命令时忘记使用sudo,则会收到此消息。

否则,这表示其他人正在安装或删除软件,并在执行操作时锁定了apt数据库。可以做到这一点的程序是:

  • 软件中心

  • 更新管理器

  • apt链接安装程序(我认为这现在通过SC)

  • apt-get或aptitude命令行实用程序。

  • 新立得包管理器

重要提示:只能尝试下面的最后手段,因为它可能会导致系统崩溃。首先尝试按照Faheem’s answer中的描述,杀死任何正在运行的aptaptitude实例。

您可以通过删除文件来强制关闭锁,但是如果没有首先关闭安全保存锁的程序,建议不要使用该锁,因为可能导致损坏或中断安装(坏)。由João提供的命令应关闭保存该锁的程序,然后移除该锁,但不会保护您免于安装中断:

sudo fuser -cuk /var/lib/dpkg/lock; sudo rm -f /var/lib/dpkg/lock   

同样的命令可以用于apt缓存锁定:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock

第五种方案

最有可能的方法是:

  • 启动Ubuntu

  • 启动一个终端

  • 键入sudo apt-get install whatever

并且命令行 aptupdate-manager自动轮询重叠。

所以如果你在几分钟内再试一次,应该解决它。

第六种方案

只有一个程序可以保持锁定。确保你没有运行智力,突触或娴熟。关闭程序并重新运行它应该可以工作。你可以打开突触,或者打开运行apt-get的另一个终端窗口,或者运行更新管理器。检查它并查看它们是否正在运行,如果它们中的任何一个是运行的关闭它并重试。

在终端中尝试使用此命令以查找正在运行的内容

ps -e | grep -e apt -e adept | grep -v grep

注意:如果没有打印任何内容,请在终端中输入以下内容以取消锁定

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

现在你可以安装任何软件包。

第七种方案

到目前为止,最好的方法是在不破坏可能的后台运行安装的情况下运行安装程序(因为它可能通过删除锁定文件来实现),因此使用apt停止服务:

错误:

# sudo apt-get upgrade
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?`

解:

sudo systemctl stop apt-daily.timer

升级系统后,我建议re-enabling它,因为它的错误锁定可以通过升级来解决。

sudo systemctl start apt-daily.timer

我没有验证升级后这个错误得到修复。验证完成后,我会添加一条新评论

第八种方案

如果您将’Update Manager’并行运行以进行任何更新检查或安装为安装进程地点Lock,则会发生这种情况。如果您在运行’Update Manager’时遇到相同的错误,则必须将其从/var/lib/dgkg/lock中删除,这肯定不能手动执行

sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock

工作正常。取自:https://askubuntu.com/a/15469/68707

第九种方案

首先,我们应该检查使用lsof创建锁文件的过程:

sudo lsof /var/lib/dpkg/lock

或者在/var/lib/apt/lists/lock有问题的其他情况下:

sudo lsof /var/lib/apt/lists/lock

输出将接近于以下内容:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
apt-get   12127 root   4uW  REG  252,1        0    86   /var/lib/apt/lists/lock

然后我们应该检查commad在做什么,我们可以使用pspgrep等找出它;命令是apt-get,所以我运行:

pgrep apt-get -a

-a开关为我列出了完整的命令,在我的情况下是:

 pgrep -a apt-get
 12127 apt-get update

我们可以看到它正在运行update子命令,我也可以运行这样的东西:

ps -f 12127

这产生:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     12127 12126  0 09:39 pts/0    S+     0:00 apt-get update

在这种情况下,我会等待一段时间才能释放资源,如果在2或3分钟后问题仍然存在或命令是我不关心或对系统没有害的事情(如apt-get update),则发送一个SIGTERM过程:

sudo kill -15 12127

它应该做的工作,如果这次didn’t I’m要发送SIGINT(这就像按下CTRL + C):

sudo kill -2 12127

如果它不起作用,我们应该发送一个SIGHUP(kill -1),最后如果没有任何工作,我简单地杀死进程:

sudo kill -9 12127

要么

sudo pkill -9 apt-get

然后我删除繁忙的资源:

sudo rm /var/lib/apt/lists/lock

第十种方案

此错误可能是由Update Manager试图自动刷新后台中的软件包列表引起的,通常在您登录后立即刷新,从而锁定目录。

在这种情况下,只需等待几秒钟(或更多,如果上次更新很久以前),它就可以完成或启动Update Manager来检查状态。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9.html,未经允许,请勿转载。