当前位置: 首页>>技术教程>>正文


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

,

问题描述

我有一个apt-get install过程似乎无可救药地楔入processing triggers for python-support步骤。

我倾向于kill它,但在过去,简单的kill-一个apt-get install过程让我非常悲痛。 (IIRC保留了各种锁文件等)

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

最佳解决方案

杀戮过程

一般来说,为了杀死进程,杀死进程没有比使用常规kill(SIGTERM)更安全的方法。如果它是一个交互式过程,它通常允许您通过发送SIGINT信号来阻止它更安全,通常通过按Ctrl + C发送。这个信号被进程本身捕获,可以听到它 – 通常会优雅地停止。 (thanks Eliah)

DPKG数据库

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

修复方法只是触发一个进程以使所有包处于已配置状态。实际上,如果您已经中断了apt-get操作,您可以稍后使用它完成

sudo dpkg --configure -a

它知道如何从断开的状态恢复到all-configured状态,并且从这个意义上说它只是从它被中断的地方继续。锁定文件留在那里直到你完成它,这是有原因的 – 防止DPKG数据库处于不干净状态的新操作。

关于SIGKILL(9)

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

次佳解决方案

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

  1. 杀死名为apt-get的过程:killall -9 apt-get

  2. 重新配置dpkg:dpkg –configure -a

  3. 更新apt-get:apt-get更新

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

这是我从某个地方学到的,但不幸的是我记不清究竟在哪里。

第三种解决方案

sudo dpkg -r <package name>

在我的情况下,我在Ubuntu 12.04上遇到了Java 8的问题,所以……

sudo dpkg -r oracle-java8-installer

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6677.html,未经允许,请勿转载。