Как безопасно прервать установку apt-get?

У меня есть apt-get install процесс, который, по-видимому, безнадежно застрял на processing triggers for python-support шаг.

Моя склонность состоит в том, чтобы kill это, но в прошлом, просто kill- создание apt-get install этот процесс причинил мне много горя. (Различные файлы блокировки IIRC остаются позади и т.д.)

Есть ли более безопасный способ остановить этот процесс?

Процессы уничтожения

Вообще говоря, для уничтожения процесса нет более безопасного способа убить процесс, чем с помощью обычного kill (SIGTERM). В случае, если это интерактивный процесс, он обычно позволяет вам остановить его еще безопаснее, отправив сигнал SIGINT, обычно отправляемый нажатием Ctrl + C. Этот сигнал улавливается самим процессом мочь прислушайтесь к нему - и обычно изящно останавливайтесь. (спасибо Элайя)

База данных DPKG

Что касается управления пакетами, то это своего рода особый случай. База данных DPKG, которую команды APT используют под водой, всегда может определить, не завершилась ли операция. Каждый пакет имеет фактический состояние, которое отмечено в, а также текущий состояние, например, распакованное, настроенное и т.д. Убив интерфейс 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-получить обновление
  4. Пакеты обновлений, в том числе неправильно установленные:

    apt-получить обновление

Этому я где-то научился, но, к сожалению, не могу точно вспомнить, где именно.

sudo dpkg -r <package name>

В моем случае у меня были проблемы с Java 8 в Ubuntu 12.04, так что...

sudo dpkg -r oracle-java8-installer

Linux и другие системы типа Unix очень эффективны из командной строки, но очень неумолимы после запуска процесса. Отправка процессу сигнала завершения, безусловно, приведет к завершению запущенного процесса, но имейте в виду, что вы оставляете базу данных в нестабильном состоянии. Последняя запись может быть закрыта неправильно, поэтому вам может потребоваться восстановить базу данных. Не только с apt, но и с любым приложением.

Всегда старайтесь завершить работу приложения обычным способом и уничтожать только те процессы, которые являются запущенными приложениями.

Вот как я это делаю, Ctrl+C Но имейте в виду, что это безопасно до тех пор, пока apt-get находится в фазе загрузки или обновления кэша. Кроме этого, я не могу придумать более безопасного способа. Просто дайте ему закончить и отмените изменения, удалив или понизив каким-либо образом.Загруженные файлы можно очистить с помощью sudo apt-get autoclean