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

kjo*_*kjo 55 apt

我有一个apt-get install过程似乎无可救药地陷入了困境processing triggers for python-support

我的倾向是kill它,但在过去,简单的kill一个apt-get install过程让我很伤心。(IIRC 各种锁文件被留下等)

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

ger*_*ijk 55

杀死进程

一般来说,对于终止进程,没有比常规终止 (SIGTERM) 更安全的终止进程的方法。如果它是一个交互式过程,它通常允许您通过发送 SIGINT 信号(通常通过按Ctrl+发送)来更安全地停止它C。这个信号被进程本身捕获,可以监听它——并且通常会优雅地停止。感谢以利亚

DPKG数据库

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

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

sudo dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)

它知道如何从损坏的状态恢复到完全配置的状态,从这个意义上说,只需从中断的地方继续。锁定文件一直留在那里,直到您完成为止,这是有原因的 - 防止 DPKG 数据库处于不干净状态的新操作。

关于 SIGKILL (9)

发送 SIGKILL(十进制表示 9)是非常不安全的。这个信号不会被进程捕捉到,但是不管进程喜欢与否,整个进程都会被操作系统(内核)清理掉。文件系统上的文件状态可能会处于损坏状态。永远不要发送这些信号,除非它不再收听其他更优雅的信号。

  • 当应用程序提供终止它的方法时,这通常比 SIGTERM 更安全。例如,大多数(如果不是全部)文本编辑器、文字处理器、图形程序、Web 浏览器和其他基于文本或图形的应用程序,在这些应用程序中,用户可能会创建不应丢失的内容,**不要自动-当他们收到 SIGTERM 时,在退出之前保存它**。另外,请注意 SIGINT 有时可能比 SIGTERM 更安全(但通常不应发送,除非明确需要与 Ctrl+C 相同的结果)。 (4认同)

car*_*dil 18

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

  1. 杀死名为 apt-get 的进程:

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

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

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

    apt-get 升级

这是我从某个地方学到的,但不幸的是我不记得确切的位置。

  • 请不要发送信号 9 (SIGKILL),除非您有充分的理由这样做。请参阅我更新的答案。 (10认同)