如何安全地中止 apt-get install?

如何安全地中止 apt-get install?

我有一个apt-get install过程似乎无可救药地卡在了这processing triggers for python-support一步。

我倾向于kill这样做,但在过去,简单地对kill一个过程进行 -ingapt-get install操作会给我带来很多麻烦。(如果我没记错的话,各种锁定文件都遗留了下来,等等。)

有没有更安全的方法来停止这个过程?

答案1

终止进程

一般来说,对于终止进程而言,没有比常规 kill (SIGTERM) 更安全的方法了。如果是交互式进程,通常可以通过发送 SIGINT 信号(通常通过按Ctrl+发送)来更安全地停止进程C。此信号由进程本身捕获听它——并且通常会优雅地停止。谢谢 Eliah

DPKG 数据库

关于包管理是一种特殊情况。APT 命令在水下使用的 DPKG 数据库始终可以检测操作是否尚未完成。每个包都有一个实际的标记为的状态以及当前的状态,例如解压、配置等。通过关闭 APT 前端,数据库将处于损坏状态,但在已知状态。锁定文件只有在全部恢复到干净状态后才会被释放 - 您应该修复此问题,直到它允许新的操作。

修复的方法是启动一个进程,让所有包都处于配置状态。实际上,如果你中断了某个apt-get操作,你可以稍后使用以下命令完成它

sudo dpkg --configure -a

它知道如何从损坏状态恢复到完全配置状态,并且从中断处继续。锁定文件会保留在那里,直到您完成该操作,这样做是有原因的 - 防止在 DPKG 数据库处于不干净状态时执行新操作。

关于 SIGKILL (9)

发送 SIGKILL(十进制表示 9)非常不安全。进程无法捕获此信号,但无论进程是否愿意,整个进程都会被操作系统(内核)清理。文件系统上的文件状态可能会处于损坏状态。除非它不再监听其他更合适的信号,否则切勿发送这些信号。

答案2

当我遇到 apt-get 失败时,我会执行以下操作(以 root 身份,即sudo在所有命令之前):

  1. 终止名为 apt-get 的进程:

    killall -9 apt-get
  2. 重新配置 dpkg:

    dpkg--configure-a
  3. 更新 apt-get:

    apt-get 更新
  4. 更新软件包,包括那些未正确安装的软件包:

    apt-get 升级

这是我在某个地方学到的,但不幸的是我记不清具体在哪里了。

答案3

sudo dpkg -r <package name>

就我而言,我在 Ubuntu 12.04 上使用 Java 8 时遇到了问题,所以......

sudo dpkg -r oracle-java8-installer

答案4

如果高级软件包工具 (APT)挂起,则/var/lib/dpkg/lock/var/lib/dpkg/lock-frontend锁定文件可能被保留。您可以运行以下过程—Debian Wiki 在问: 当 dpkg 锁被持有时可以做什么?部分。

  1. 终止持有锁文件的进程。

    sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
    

    以下选项被传递给该fuser命令——用于识别使用文件或套接字的进程的命令:

    • -v--详细启用详细模式。
    • -k- 杀终止访问该文件的进程。除非使用 -信号,发送了 SIGKILL 信号。在这种情况下,交换机-TERM指示发送了 SIGTERM 信号。
    • -我- 交互的在终止进程之前请求用户确认。

    笔记:如果尽管您尽了最大努力,该-TERM选项仍然不起作用,那么请考虑增加fuser命令的强度,并使用以下命令发送 SIGKILL 信号:sudo fuser -vki -KILL /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend

  2. 完成 dpkg 待配置步骤。

    sudo dpkg --configure --pending
    

相关内容