尝试使用时出现此错误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?
我怎样才能解决这个问题?
尝试使用时出现此错误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?
我怎样才能解决这个问题?
这应该作为最后的手段。如果您不小心使用它,您最终可能会导致系统损坏。在执行此操作之前,请先尝试其他 答案。
您可以使用以下命令删除锁定文件:
您可能还需要删除缓存目录中的锁定文件
之后,尝试再次打开 Synaptic。
(注意:我的原始答案由主要
dpkg
开发人员Guillem Jover 广泛编辑。)我看到几乎所有的答案都建议删除锁。永远不要这样做,总是最好杀死(应该
dpkg
是对那种事件有弹性),而不是考虑删除它的锁文件(它的存在并不表示锁被持有)。当一个dpkg
或一个apt
进程正在运行时获取锁,并在进程完成或被终止时释放(如果需要,由内核)。较新dpkg
的apt
版本将打印持有竞争锁文件的进程的 PID,apt
现在甚至默认等待锁被释放。这在dpkg FAQ中有介绍。如果你试试:
这将提示终止当前持有这些锁文件的任何进程,一旦被杀死,锁就会被释放。如果您看到一个
apt-get
进程或一个aptitude
看起来卡住的进程,杀死它们应该比打包系统处于软件包安装过程中时的危害要小。如果进程真的被卡住并且您别无选择,您可能需要通过传递-KILL
而不是-TERM
. 然后,您需要完成任何挂起的配置,以便使dpkg
它们进入更好的状态,并且它还可以将其日志的更新集成到主状态数据库。直接杀死
dpkg
进程(如果存在)通常不是一个好主意,因为如果dpkg
处于活动状态,某些维护者脚本可能正在执行对突然终止(或崩溃)没有弹性的操作,但 dpkg 内部应该对这种突然终止有弹性,并且最好这样做,而不是删除任何锁定文件,因为这更有可能损坏dpkg数据库和文件系统。杀死诸如
apt-get
或aptitude
进程之类的前端虽然并不理想,但通常更安全。删除您的
/var/lib/dpkg/lock
文件并强制重新配置包。它应该在此之后工作。
最有可能的方法是:
sudo apt-get install whatever
并且命令行与自动轮询
apt
重叠。update-manager
因此,如果您在几分钟后重试,应该可以解决它。
sudo
如果您在执行 apt 命令时忘记使用,您将收到此消息。否则,这表明其他东西正在安装或删除软件,并在执行操作时锁定了 apt 数据库。可以做到这一点的程序是:
重要提示:仅在不得已的情况下尝试以下方法,因为它可能会使您的系统崩溃。首先尝试杀死任何正在运行的实例
apt
或aptitude
如Faheem 的回答中所述。您可以通过删除文件来强制关闭锁定,但不建议先关闭安全持有锁定的程序,因为您可能会导致损坏或中断安装(坏)。João 提供的命令应该关闭持有锁的程序,然后移除锁,但不会保护您免受安装中断:
相同的命令可用于 apt 缓存锁:
只有一个程序可以持有锁。确保您没有运行 aptitude、synaptic 或 adept。关闭程序并再次运行它应该可以工作。您可能打开了突触,或者打开了另一个运行 apt-get 的终端窗口,或者运行了更新管理器。检查它并查看其中是否有任何正在运行,如果有的话他们正在运行关闭它并重试。
在终端中尝试此命令以查找正在运行的内容
注意:
如果没有打印任何内容,请在终端中键入以下内容以解除锁定
现在您可以安装任何软件包。
到目前为止,在不破坏可能的后台运行安装(因为它可能通过删除锁定文件而发生)的情况下使其正常工作的最佳方法是使用 apt 停止服务:
错误:
解决方案:
升级系统后,我建议重新启用它,因为锁定它的错误可以通过升级修复。
sudo systemctl start apt-daily.timer
我尚未验证此错误在升级后得到修复。验证后我会添加一条新评论
首先,我们应该检查使用哪个进程创建了锁定文件
lsof
:或在其他
/var/lib/apt/lists/lock
有问题的情况下:输出将接近于:
然后我们应该检查 commad 在做什么,我们可以使用 等找到
ps
它pgrep
;命令是apt-get
这样我运行:开关为我列出了完整的
-a
命令,在我的例子中是:我们可以看到它正在运行
update
子命令,我也可以运行这样的东西:产生:
在这种情况下,我会等待一分钟以释放资源,如果 2 或 3 分钟后问题仍然存在,或者命令是我不关心或对系统无害的东西(像这样
apt-get update
),我发送一个SIGTERM
到过程:它应该可以完成工作,如果没有,我
SIGINT
这次要发送(就像按CTRL+一样C):如果它也不起作用,我们应该发送一个
SIGHUP
(kill -1
),最后如果不起作用,我就简单地终止该进程:或者
然后我删除繁忙的资源:
此错误可能是由于更新管理器试图在后台自动刷新软件包列表,通常在您登录后立即刷新,从而锁定目录。
在这种情况下,只需等待几秒钟(或更多,如果您的上一次更新是很久以前)就可以完成或启动更新管理器来检查状态。
不要太快删除某些东西,它可能会完全损坏您的系统;而是等到当前安装或卸载程序完成其任务,然后您将获得访问权限。如果您认为当前没有安装或卸载任何内容,则只需使用命令重新启动系统
sudo reboot
。