Процессы убийства
Вообще говоря, для уничтожения процесса нет более безопасного способа уничтожения процесса, чем обычное уничтожение (SIGTERM). В случае, если это интерактивный процесс, он обычно позволяет остановить его еще безопаснее, отправив сигнал SIGINT, обычно отправляемый нажатием Ctrl+ C. Этот сигнал улавливается самим процессом, который может его прослушать - и обычно изящно останавливается. ( спасибо, Элия )
База данных DPKG
Относительно управления пакетами это особый случай. База данных DPKG, которую команды APT используют под водой, всегда может определить, не завершена ли операция. Каждый пакет имеет фактическое состояние, которое помечено так же, как и текущее состояние, например, распаковано, сконфигурировано и т. Д. При закрытии интерфейса APT база данных будет в поврежденном, но в известном состоянии. Файлы блокировки будут освобождены только после того, как они вернутся в чистое состояние - вы должны исправить это, пока он не разрешит новые операции.
Способ исправить это просто запустить процесс, чтобы получить все пакеты в настроенном состоянии. Практически говоря, если вы прервали apt-get
операцию, вы можете просто закончить ее позже, используя
sudo dpkg --configure -a
Он знает, как восстановиться из сломанного состояния в полностью настроенное состояние и в этом смысле просто продолжить с того места, где оно было прервано. Файлы блокировки остаются там до тех пор, пока вы не закончите это, и это по причине - чтобы предотвратить новые операции с базой данных DPKG в нечистом состоянии.
О СИГКИЛЛЕ (9)
Отправка SIGKILL (десятичное представление 9) очень небезопасно. Этот сигнал не перехватывается процессом, но операционная система (ядро) будет очищать весь процесс независимо от того, нравится он процессу или нет. Состояние файлов в файловой системе может быть оставлено в поврежденном состоянии. Никогда не отправляйте эти сигналы, если они больше не слушают другие более изящные сигналы.
Когда я сталкиваюсь с ошибкой с помощью apt-get, я делаю следующее (как root, т.е.
sudo
перед всеми командами):Убейте процесс с именем apt-get:
Переконфигурируйте dpkg:
Обновите apt-get:
Обновление пакетов, в том числе неправильно установленных:
Это я откуда-то узнал, но, к сожалению, точно не помню, где именно.
источник
В моем случае у меня были проблемы с Java 8 на Ubuntu 12.04, так что ...
источник
Linux и другие системы типа Unix очень мощные из командной строки, но очень неумолимы после запуска процесса. При отправке процесса сигнал уничтожения обязательно уничтожит запущенный процесс, но имейте в виду, что вы оставляете базу данных в нестабильном состоянии. Последняя запись может быть закрыта неправильно, поэтому вы рискуете восстановить базу данных. Не только с apt, но и с любым приложением.
Всегда пытайтесь завершить приложение обычным способом и уничтожайте только те процессы, которые запускают приложения.
источник
Вот как я это делаю, Ctrl+ CНо учтите, что это безопасно, пока apt-get находится в фазе загрузки или обновления кеша. Кроме этого я не могу придумать более безопасный путь. Просто дайте ему закончить и отмените изменения, удалив или понизив каким-либо образом. Загруженные файлы можно очистить с помощью
sudo apt-get autoclean
источник