如何安全地中止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
):
-
杀死名为apt-get的进程:
killall -9 apt-get
-
重新配置dpkg:
dpkg --configure -a
-
更新apt-get:
apt-get update
-
更新包,包括那些未正确安装的包:
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
下载的文件