很多时候,当我想要update
我的系统之一时,apt
它被其他进程“锁定”。它可能在同一天发生多次。我必须运行此命令和kill
顶级进程才能apt
返回,但我不应该遇到这个问题,我以前从未遇到过。
当我这样做时,apt update
我得到这个:
root ~ # apt update
Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
我的系统是 Debianstretch 9.8,我安装了所有更新。我使用 KDE Plasma 桌面。
root ~ # ps aux | grep apt
_apt 25783 9.0 0.1 64300 24956 ? S 10:12 0:59 /usr/lib/apt/methods/http
_apt 25784 8.9 0.1 64300 25032 ? S 10:12 0:59 /usr/lib/apt/methods/http
_apt 25785 8.9 0.2 206296 35636 ? S 10:12 0:59 /usr/lib/apt/methods/https
_apt 25786 9.0 0.2 206300 35532 ? S 10:12 0:59 /usr/lib/apt/methods/https
_apt 25787 9.0 0.1 64300 25012 ? S 10:12 0:59 /usr/lib/apt/methods/http
_apt 25788 8.9 0.1 64300 25008 ? S 10:12 0:58 /usr/lib/apt/methods/http
_apt 25789 9.1 0.1 64300 25192 ? S 10:12 0:59 /usr/lib/apt/methods/http
_apt 25790 9.1 0.1 64300 24984 ? S 10:12 0:59 /usr/lib/apt/methods/http
_apt 25817 4.8 0.1 56876 21644 ? S 10:14 0:28 /usr/lib/apt/methods/gpgv
_apt 25818 4.8 0.2 206296 35568 ? S 10:14 0:28 /usr/lib/apt/methods/https
_apt 25820 4.7 0.2 206304 35636 ? S 10:14 0:27 /usr/lib/apt/methods/https
_apt 26426 0.0 0.1 56876 19752 ? S 10:22 0:00 /usr/lib/apt/methods/gpgv
_apt 26427 0.0 0.0 4276 1656 ? S 10:22 0:00 /bin/sh /usr/bin/apt-key --quiet --readonly verify --status-fd 3 /tmp/apt.sig.LTumm1 /tmp/apt.data.hNgDBV
_apt 26511 104 0.0 38092 8508 ? R 10:23 0:03 apt-config shell GPGV Apt::Key::gpgvcommand
root 26513 0.0 0.0 12788 1000 pts/1 S+ 10:23 0:00 grep apt
问题:
我不明白这意味着什么是 apt 正在做的事情以及如何解决它?
编辑:
root ~ # apt list packagekit
Listing... Done
packagekit/stable,stable,now 1.1.5-2+deb9u1 amd64 [installed,automatic]
root ~ # apt list aptdaemon
Listing... Done
答案1
迄今为止的答复详细信息:
因为您的ps
输出显示 no /usr/bin/apt-get
(或/usr/bin/apt
) 命令,所以 apt 子进程必须由其他进程启动。该进程必须正在使用该libapt
库。您应该真正确定这个父进程是什么,例如通过查看pstree
.但我知道的唯一可能是packagekitd
PackageKit 守护进程。
为了公平地对待 PackageKit 守护进程,我认为它只能响应请求 - 例如来自 gnome-software、pk-update-icon - 或来自 KDE Plasma (KDE“Apper”程序?)
Debian 上的 PackageKit 操作会与命令发生冲突,这是一个已知的限制apt
。还期望一个好的 GUI 会定期检查安全更新,以便提醒您安装它们。我很遗憾地说这不是一个完美的组合!
然而,它是不是预计这种情况“总是”发生。通常您不会一直执行后台 PackageKit 操作。特别是在像您正在运行的稳定版本的 Debian 上。与 Fedora Linux 相比,Debian 不会发布大量更新,并且apt update
在没有更新时速度相当快且高效。
如果您经常遇到此问题,则可能会遇到需要花费apt
大量时间的问题,或者不知何故导致apt
、PackageKit 或 GUI 系统不断重试。
PackageKit 源自 RedHat。在基于 RedHat 的发行版(例如 Fedora Linux)中,我知道 PackageKit 能够运行“后台”操作,例如自动检查更新。当用户开始要求 PackageKit 做某事时,后台操作应该自动取消。我不知道Debian+Apper是否是这样工作的。
你可以尝试pkcon refresh force
通过使用 Apper 或+pkcon upgrade
而不是apt update
+来请求 PackageKit 进行“前台”更新apt upgrade
。通过 PackageKit 进行升级与 略有不同apt upgrade
,因为 PackageKit 不会要求进行包设置,也不会询问您是否要保留修改的配置文件、用打包的更改覆盖它们,或者尝试将它们合并在一起。
答案2
尝试使用这些命令,如果您不是 root 则尝试使用sudo
命令,
pkill apt && apt update
我不确定这个命令。这将杀死系统上运行的 apt 进程。