Come interrompere in modo sicuro apt-get install?


44

Ho un apt-get installprocesso che sembra essere irrimediabilmente incastrato al processing triggers for python-supportpasso.

La mia inclinazione è di killesso, ma in passato, semplicemente kill-ing un apt-get installprocesso mi ha causato molto dolore. (I file di blocco assortiti IIRC vengono lasciati indietro, ecc.)

C'è un modo più sicuro per interrompere questo processo?

Risposte:


44

Processi di uccisione

In generale, per uccidere un processo, non c'è modo più sicuro di uccidere un processo se non con un normale kill (SIGTERM). Nel caso in cui sia un processo interattivo di solito ti consente di fermarlo ancora più sicuro inviando un segnale SIGINT, di solito inviato premendo Ctrl+ C. Questo segnale viene intrappolato dal processo stesso che può ascoltarlo e di solito si ferma con grazia. ( grazie Eliah )

Database DPKG

Per quanto riguarda la gestione dei pacchetti è una specie di caso speciale. Il database DPKG che i comandi APT usano sott'acqua può sempre rilevare se un'operazione non è terminata. Ogni pacchetto ha uno stato reale che è contrassegnato come pure uno stato corrente , ad esempio decompresso, configurato, ecc. Uccidendo il frontend APT, il database sarà in uno stato rotto, ma noto . I file di blocco verranno rilasciati solo una volta ripristinati in uno stato pulito: è necessario risolverli fino a quando non consentirà nuove operazioni.

Il modo per risolvere è semplicemente avviare un processo per ottenere tutti i pacchetti nello stato configurato. In pratica, se hai interrotto apt-getun'operazione, puoi semplicemente terminarla in seguito usando

sudo dpkg --configure -a

Sa come recuperare dallo stato rotto a uno stato completamente configurato e in tal senso continuare da dove è stato interrotto. I file di blocco vengono lasciati lì fino a quando non hai finito, e questo è per un motivo - per impedire nuove operazioni con il database DPKG in uno stato sporco.

Informazioni su SIGKILL (9)

L'invio di un SIGKILL (rappresentazione decimale 9) non è molto sicuro. Questo segnale non viene catturato dal processo, ma l'intero processo verrà ripulito dal sistema operativo (kernel) indipendentemente dal fatto che al processo piaccia o meno. Lo stato dei file sul file system può essere lasciato in uno stato corrotto. Non inviare mai questi segnali a meno che non stia più ascoltando altri segnali più aggraziati.


2
Quando un'applicazione offre un modo per terminarla, di solito è ancora più sicuro di SIGTERM. Ad esempio, la maggior parte (se non tutti) editor di testo, elaboratori di testi, programmi di grafica, browser Web e altre app di testo o grafiche in cui è probabile che un utente crei contenuti da non perdere, non salvarli automaticamente prima di smettere quando ricevono SIGTERM. Inoltre, tieni presente che a volte SIGINT potrebbe essere più sicuro di SIGTERM (ma in genere non dovrebbe essere inviato a meno che lo stesso risultato di Ctrl + C sia esplicitamente desiderato).
Eliah Kagan,

16

Quando riscontro un errore con apt-get, faccio quanto segue (come root, cioè sudoprima di tutti i comandi):

  1. Uccidi il processo chiamato apt-get:

    killall -9 apt-get
  2. Riconfigura dpkg:

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

    apt-get update
  4. Pacchetti di aggiornamento, inclusi quelli installati in modo errato:

    apt-get upgrade

Questo l'ho imparato da qualche parte, ma sfortunatamente non ricordo esattamente dove.


6
Per favore, non inviare mai un segnale 9 (SIGKILL) a meno che tu non abbia un'ottima ragione per farlo. Vedi la mia risposta aggiornata.
gertvdijk,

3
sudo dpkg -r <package name>

Nel mio caso ho avuto problemi con Java 8 su Ubuntu 12.04, quindi ...

sudo dpkg -r oracle-java8-installer

1

Linux e altri sistemi di tipo Unix sono molto potenti dalla riga di comando ma non perdonano una volta avviato un processo. L'invio di un processo il segnale di interruzione ucciderà sicuramente il processo in esecuzione, ma tieni presente che stai lasciando un database in uno stato instabile. L'ultimo record potrebbe non essere chiuso correttamente, pertanto si rischia di dover riparare un database. Non solo con apt ma con qualsiasi applicazione.

Cerca sempre di terminare l'applicazione in modo normale e di eliminare solo i processi che vengono eseguiti da applicazioni.


0

Ecco come lo faccio, Ctrl+ CMa tieni presente che è sicuro finché apt-get è in fase di download o il suo aggiornamento della cache. A parte questo, non riesco a pensare a un modo più sicuro. Lascialo terminare e annulla le modifiche disinstallando o eseguendo il downgrade in qualche modo. I file scaricati possono essere puliti consudo apt-get autoclean

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.