很多时候,当我想要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/
我的系统是 Debian stretch 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
到目前为止的答案细节:
因为您的
ps
输出显示没有/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 上。Debian 不会发布很多更新,例如与 Fedora Linux 相比,并且
apt update
在没有更新时非常快速和高效。如果你经常遇到这个问题,你可能会遇到一些
apt
需要花费大量时间的问题,或者以某种方式使apt
PackageKit 或你的 GUI 系统不断重试。PackageKit 源自 RedHat。在 Fedora Linux 等基于 RedHat 的发行版中,我知道 PackageKit 能够运行“后台”操作,例如自动检查更新。当用户开始要求 PackageKit 做某事时,后台操作应该会自动取消。我不知道 Debian+Apper 是否这样工作。
您可以尝试通过使用 Apper 或
pkcon refresh force
+pkcon upgrade
而不是apt update
+来向 PackageKit 询问“前台”更新apt upgrade
。通过 PackageKit 升级与 略有不同apt upgrade
,因为 PackageKit 不会询问包设置,也不会询问您是否要保留已修改的配置文件,用打包的更改覆盖它们,或者尝试将它们合并在一起。尝试使用这些命令,如果您不是 root,请尝试使用
sudo
命令,我不确定这个命令。这将杀死系统上运行的 apt 进程。