Як безпечно припинити встановлення apt-get?


44

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

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

Чи є безпечніший спосіб зупинити цей процес?

Відповіді:


44

Процеси вбивства

Взагалі кажучи, для вбивства процесу немає більш безпечного способу вбити процес, ніж звичайного вбивства (SIGTERM). У випадку, якщо це інтерактивний процес, він зазвичай дозволяє зупинити його ще безпечніше, надсилаючи сигнал SIGINT, який зазвичай надсилається натисканням Ctrl+ C. Цей сигнал перебуває в пастці, сам процес його може слухати - і зазвичай граціозно припиняється. ( спасибі Елія )

База даних DPKG

Щодо управління пакунками - це свого роду особливий випадок. База даних DPKG, яку команди APT використовують під водою, завжди може виявити, чи не завершилася операція. Кожен пакет має фактичний стан, який позначений, а також поточний стан, наприклад, розпакований, налаштований тощо. Вбивство FT-інтерфейсу APT буде перешкоджено, але у відомому стані. Файли блокування будуть випущені лише після того, як вони все повернуться в чистому стані - ви повинні це виправити, поки це не дозволить нових операцій.

Спосіб виправлення - це лише запустити процес отримання всіх пакетів у налаштованому стані. Практично кажучи, якщо ви перервали apt-getоперацію, ви можете просто закінчити її пізніше, використовуючи

sudo dpkg --configure -a

Він знає, як відновитись із зламаного стану до всеконфігурованого стану і в цьому сенсі просто продовжувати з того місця, де він був перерваний. Файли блокування залишаються там, поки ви цього не закінчите, і це є причиною - щоб не допустити нових операцій з базою даних DPKG в нечистому стані.

Про SIGKILL (9)

Надсилання SIGKILL (десяткове представлення 9) дуже небезпечно. Цей сигнал не підхоплюється процесом, але весь процес буде очищений операційною системою (ядром), сподобався він чи ні. Стан файлів у файловій системі може залишитись у пошкодженому стані. Ніколи не надсилайте ці сигнали, якщо ви більше не слухаєте інші більш витончені сигнали.


2
Коли програма пропонує спосіб її припинення, це зазвичай навіть безпечніше, ніж SIGTERM. Наприклад, більшість (якщо не всі) текстові редактори, текстові процесори, графічні програми, веб-браузери та інші текстові або графічні програми, де користувач може створити вміст, який не слід втрачати, не зберігати його автоматично. перед тим, як відмовитися, коли вони отримують SIGTERM. Також зауважте, що SIGINT іноді може бути безпечнішим, ніж SIGTERM (але зазвичай не надсилається, якщо явно не потрібен той самий результат, що і Ctrl + C).
Елія Каган

16

Коли я стикаюся з збоєм з apt-get, я виконую наступні дії (як root, тобто sudoперед усіма командами):

  1. Вбийте процес з назвою apt-get:

    killall -9 влучно-отримати
  2. Перенастройте dpkg:

    dpkg - конфігурація -a
  3. Оновіть apt-get:

    apt-get update
  4. Оновіть пакети, включаючи неправильно встановлені:

    apt-get оновлення

Це я дізнався десь, але, на жаль, не можу точно згадати, де.


6
Будь ласка, ніколи не надсилайте сигнал 9 (SIGKILL), якщо у вас немає дуже вагомих причин для цього. Дивіться мою оновлену відповідь.
gertvdijk

3
sudo dpkg -r <package name>

У моєму випадку у мене були проблеми з Java 8 на Ubuntu 12.04, тому ...

sudo dpkg -r oracle-java8-installer

1

Linux та інші системи типу Unix дуже потужні в командному рядку, але дуже невблаганні, коли процес починається. Відправлення процесу вбивства сигналу, безумовно, знищить процес, який працює, але майте на увазі, що ви залишаєте базу даних у нестабільному стані. Остання запис може бути закрито неправильно, тому ви ризикуєте відновити базу даних. Не тільки з влучним, але і з будь-яким додатком.

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.