Bagaimana cara membatalkan dengan aman apt-get install?

44

Saya memiliki apt-get installproses yang tampaknya tidak ada harapan pada processing triggers for python-supportlangkahnya.

Kecenderungan saya adalah untuk killitu, tetapi di masa lalu, hanya kill- apt-get installproses yang telah menyebabkan saya banyak kesedihan. (IIRC file kunci berbagai macam tertinggal, dll.)

Apakah ada cara yang lebih aman untuk menghentikan proses ini?

kjo
sumber

Jawaban:

44

Proses pembunuhan

Secara umum untuk membunuh suatu proses, tidak ada cara yang lebih aman untuk membunuh suatu proses daripada dengan pembunuhan biasa (SIGTERM). Jika ini adalah proses interaktif, biasanya Anda dapat menghentikannya lebih aman dengan mengirim sinyal SIGINT, biasanya dikirim dengan menekan Ctrl+ C. Sinyal ini sedang terperangkap oleh proses itu sendiri yang dapat mendengarkannya - dan biasanya berhenti dengan anggun. ( terima kasih Eliah )

Basis data DPKG

Mengenai manajemen paket adalah semacam kasus khusus. Basis data DPKG yang digunakan perintah APT di bawah air selalu dapat mendeteksi apakah suatu operasi belum selesai. Setiap paket memiliki keadaan aktual yang ditandai sebagai serta kondisi saat ini , misalnya dibongkar, dikonfigurasi, dll. Dengan membunuh frontend APT, basis data akan rusak, tetapi dalam kondisi diketahui . File kunci hanya akan dirilis setelah semuanya kembali dalam keadaan bersih - Anda harus memperbaikinya sampai memungkinkan operasi baru.

Cara untuk memperbaikinya adalah hanya menjalankan proses untuk mendapatkan semua paket dalam keadaan terkonfigurasi. Secara praktis, jika Anda menghentikan apt-getoperasi, Anda bisa menyelesaikannya nanti menggunakan

sudo dpkg --configure -a

Ia tahu bagaimana memulihkan dari keadaan rusak ke keadaan semua-dikonfigurasi dan dalam arti itu hanya melanjutkan dari tempat itu terganggu. File kunci dibiarkan di sana sampai Anda selesai, dan itu karena suatu alasan - untuk mencegah operasi baru dengan basis data DPKG dalam keadaan tidak bersih.

Tentang SIGKILL (9)

Mengirim SIGKILL (representasi desimal 9) sangat tidak aman. Sinyal ini tidak ditangkap oleh proses, tetapi seluruh proses akan dibersihkan oleh sistem operasi (kernel) apakah proses suka atau tidak. Status file pada sistem file dapat dibiarkan dalam keadaan rusak. Jangan pernah mengirim sinyal ini kecuali tidak mendengarkan sinyal lain yang lebih anggun lagi.

gertvdijk
sumber
2
Ketika suatu aplikasi menawarkan cara untuk menghentikannya, itu biasanya bahkan lebih aman daripada SIGTERM. Misalnya, sebagian besar (jika tidak semua) editor teks, pengolah kata, program grafik, browser web, dan aplikasi berbasis teks atau grafis lainnya di mana pengguna mungkin membuat konten yang tidak boleh hilang, jangan simpan secara otomatis sebelum berhenti ketika mereka menerima SIGTERM. Juga, harap dicatat bahwa SIGINT kadang-kadang mungkin lebih aman daripada SIGTERM (tetapi umumnya tidak boleh dikirim kecuali hasil yang sama dengan Ctrl + C diinginkan secara eksplisit).
Eliah Kagan
16

Ketika saya menemukan kegagalan dengan apt-get, saya melakukan hal berikut (sebagai root, yaitu sudosebelum semua perintah):

  1. Matikan proses bernama apt-get:

    killall -9 apt-get
  2. Konfigurasikan ulang dpkg:

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

    pembaruan apt-get
  4. Perbarui paket, termasuk yang tidak diinstal dengan benar:

    peningkatan apt-get

Ini saya pelajari dari suatu tempat, tetapi sayangnya saya tidak ingat persis di mana.

carnendil
sumber
6
Tolong jangan pernah mengirim sinyal 9 (SIGKILL) kecuali Anda memiliki alasan yang sangat bagus untuk melakukannya. Lihat jawaban saya yang diperbarui.
gertvdijk
3
sudo dpkg -r <package name>

Dalam kasus saya, saya punya masalah dengan Java 8 di Ubuntu 12.04, jadi ...

sudo dpkg -r oracle-java8-installer
Funmungus
sumber
1

Linux dan sistem tipe Unix lainnya sangat kuat dari baris perintah tetapi sangat tidak memaafkan begitu proses dimulai. Mengirim proses, sinyal kill tentu akan membunuh proses yang sedang berjalan tetapi ingatlah bahwa Anda meninggalkan database dalam keadaan tidak stabil. Catatan terakhir mungkin tidak ditutup dengan benar sehingga Anda berisiko harus memperbaiki database. Tidak hanya dengan apt tetapi dengan aplikasi apa pun.

Selalu mencoba untuk mengakhiri aplikasi secara normal dan hanya mematikan proses yang menjalankan aplikasi.

Steve Sauls
sumber
0

Inilah cara saya melakukannya, Ctrl+ CTetapi perlu diingat bahwa itu aman selama apt-get dalam fase pengunduhan atau memperbarui cache. Selain itu saya tidak bisa memikirkan cara yang lebih aman. Biarkan saja itu menyelesaikan dan membatalkan perubahan dengan menghapus instalan atau menurunkan versi entah bagaimana. File yang diunduh dapat dibersihkan dengansudo apt-get autoclean

Stefano Mtangoo
sumber