当我想要更新系统时 apt 总是被锁定在其他职责中

当我想要更新系统时 apt 总是被锁定在其他职责中

很多时候,当我想要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 正在做的事情以及如何解决它?

编辑:

pstree-a

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.但我知道的唯一可能是packagekitdPackageKit 守护进程。

为了公平地对待 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 进程。

相关内容