Intereting Posts
Как изменить формат времени в Ubuntu 15.04? Выделение полей ввода Gtk при недопустимом вводе пользователем Есть ли рекомендуемая установка iptables по умолчанию? Какой вариант debconf preseed для установки GRUB автоматически на MBR? USB-принтер Ubuntu 12.x «Остановлен – ожидается, что принтер станет доступен». STS случайно падает на ubuntu Изменить, где gedit сохраняет временные файлы Как получить «Быстро» для использования Git? Lubuntu / LXDE – невозможно открыть папку на рабочем столе Как скопировать папку в несколько папок с помощью командной строки? systemd, похоже, игнорирует опцию _netdev для NFS в Ubuntu 16.04 Как изменить значок панели системных устройств (значок шестеренки) без изменения темы? Как расширить зашифрованный / домашний на второй внутренний диск? Проблема с использованием sed для замены URL-адресов в html-файлах скриптом Как вы обновляете / удаляете бок о бок?

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

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

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

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

Процессы убийства

Вообще говоря, для убийства процесса нет более безопасного способа убить процесс, чем при обычном убийстве (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-get 
  4. Обновите пакеты, в том числе неправильно установленные:

      apt-get upgrade 

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

 sudo dpkg -r <package name> 

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

 sudo dpkg -r oracle-java8-installer 

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

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

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