¿Cómo cancelar de forma segura la instalación de apt-get?


44

Tengo un apt-get installproceso que parece estar irremediablemente encajado en el processing triggers for python-supportpaso.

Mi inclinación es hacia killeso, pero en el pasado, simplemente realizar killun apt-get installproceso me ha causado mucho dolor. (Se dejan atrás los archivos de bloqueo variados del IIRC, etc.)

¿Hay alguna forma más segura de detener este proceso?

Respuestas:


44

Procesos de matanza

En general, para matar un proceso, no hay una forma más segura de matar un proceso que con un asesinato normal (SIGTERM). En caso de que sea un proceso interactivo, generalmente le permite detenerlo aún más seguro enviando una señal SIGINT, generalmente enviada presionando Ctrl+ C. Esta señal está siendo atrapada por el proceso mismo, puede escucharla y, por lo general, detenerse con gracia. ( gracias Eliah )

Base de datos DPKG

En cuanto a la gestión de paquetes es una especie de caso especial. La base de datos DPKG que usan los comandos APT bajo el agua siempre puede detectar si una operación no ha terminado. Cada paquete tiene un estado real que está marcado, así como un estado actual , por ejemplo, desempaquetado, configurado, etc. Al eliminar la interfaz APT, la base de datos estará rota, pero en un estado conocido . Los archivos de bloqueo solo se liberarán una vez que todo vuelva a estar en estado limpio; debe solucionarlo hasta que permita nuevas operaciones.

La forma de solucionarlo es simplemente activar un proceso para que todos los paquetes estén configurados. En términos prácticos, si ha interrumpido una apt-getoperación, puede terminarla más tarde usando

sudo dpkg --configure -a

Sabe cómo recuperarse del estado roto a un estado totalmente configurado y, en ese sentido, simplemente continuar desde donde fue interrumpido. Los archivos de bloqueo se quedan allí hasta que haya terminado, y eso es por una razón: para evitar nuevas operaciones con la base de datos DPKG en un estado no limpio.

Sobre SIGKILL (9)

Enviar un SIGKILL (representación decimal 9) es muy inseguro. El proceso no capta esta señal, pero el sistema operativo (kernel) limpiará todo el proceso, le guste o no. El estado de los archivos en el sistema de archivos se puede dejar en un estado corrupto. Nunca envíe estas señales a menos que ya no esté escuchando otras señales más elegantes.


2
Cuando una aplicación ofrece una forma de terminarla, eso suele ser incluso más seguro que SIGTERM. Por ejemplo, la mayoría (si no todos) los editores de texto, procesadores de texto, programas gráficos, navegadores web y otras aplicaciones gráficas o basadas en texto en las que es probable que un usuario cree contenido que no debe perderse, no lo guarde automáticamente. antes de dejar de fumar cuando reciben SIGTERM. Además, tenga en cuenta que SIGINT a veces puede ser más seguro que SIGTERM (pero generalmente no se debe enviar a menos que se desee explícitamente el mismo resultado que Ctrl + C).
Eliah Kagan

16

Cuando encuentro un error con apt-get, hago lo siguiente (como root, es decir, sudoantes de todos los comandos):

  1. Mata el proceso llamado apt-get:

    killall -9 apt-get
  2. Reconfigurar dpkg:

    dpkg --configure -a
  3. Actualizar apt-get:

    apt-get update
  4. Paquetes de actualización, incluidos los instalados incorrectamente:

    actualización apt-get

Esto lo aprendí de alguna parte, pero desafortunadamente no puedo recordar exactamente dónde.


66
Nunca envíe una señal 9 (SIGKILL) a menos que tenga una muy buena razón para hacerlo. Ver mi respuesta actualizada.
gertvdijk

3
sudo dpkg -r <package name>

En mi caso tuve problemas con Java 8 en Ubuntu 12.04, así que ...

sudo dpkg -r oracle-java8-installer

1

Linux y otros sistemas de tipo Unix son muy potentes desde la línea de comandos pero muy implacables una vez que se inicia un proceso. Al enviar un proceso, la señal de cierre ciertamente eliminará el proceso que se está ejecutando, pero tenga en cuenta que está dejando una base de datos en un estado inestable. Es posible que el último registro no se cierre correctamente, por lo que corre el riesgo de reparar una base de datos. No solo con apt sino con cualquier aplicación.

Intente siempre finalizar la aplicación de manera normal y solo elimine los procesos que se están ejecutando.


0

Así es como lo hago, Ctrl+ CPero ten en cuenta que es seguro siempre que apt-get esté en la fase de descarga o que actualice la caché. Aparte de eso, no puedo pensar de una manera más segura. Simplemente deje que termine y deshaga los cambios desinstalando o degradando de alguna manera. Los archivos descargados se pueden limpiar consudo apt-get autoclean

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.