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

我有一个apt-get install过程似乎毫无希望地楔入processing triggers for python-support步骤的processing triggers for python-support

我倾向于kill它,但在过去,简单地kill一个apt-get install过程让我感到很悲伤。 (IIRC保留了各种锁文件等)

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

杀戮过程

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

DPKG数据库

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

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

 sudo dpkg --configure -a 

它知道如何从中断状态恢复到全配置状态,从这个意义上讲,它只是从中断状态继续。 锁定文件保留在那里直到你完成它,这是有原因的 – 防止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 update 
  4. 更新包,包括那些未正确安装的包:

      apt-get升级 

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

 sudo dpkg -r  

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

 sudo dpkg -r oracle-java8-installer 

Linux和其他Unix类型系统在命令行中非常强大,但是一旦进程启动就非常无情。 发送进程kill信号肯定会杀死正在运行的进程,但请记住,您将使数据库处于不稳定状态。 最后一条记录可能无法正确关闭,因此您可能需要修复数据库。 不只是与apt相关,而是与任何应用程序。

始终尝试以正常方式结束应用程序,并且只会终止运行应用程序的进程。

我是这样做的, Ctrl+C但请注意,只要apt-get处于下载阶段或更新缓存,它就是安全的。 除此之外,我无法想象一种更安全的方式。 只需让它以某种方式卸载或降级即可完成并撤消更改。 可以使用sudo apt-get autoclean下载的文件