Bagaimana tugas "menolak dibekukan" saat ditangguhkan?

17

Kemarin, ketika menutup laptop saya, itu tidak langsung masuk ke mode siaga. Menurut log, itu berusaha, tetapi tugas menolak untuk dibekukan:

Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0):

Ini berlangsung selama beberapa jam sampai sistem benar-benar ditangguhkan. Itu syslogpenuh dengan pesan seperti dalam pertanyaan ini , karena systemdsedang mencoba lagi dan lagi.

Bagaimana ini bisa terjadi? Mengapa penjadwal tidak bisa berhenti menjadwalkan aplikasi itu? dan kemudian dibekukan secara efektif? Saya membaca bahwa ada beberapa STOPperintah, salah satunya meminta dengan baik dan salah satunya memaksa membeku. Mengapa systemdtidak menggunakan ini atau mengapa ini tidak berhasil di sini?

piegames
sumber

Jawaban:

25

Pembekuan tugas didokumentasikan secara rinci dalam dokumentasi kernel .

Proses ruang pengguna tidak bisa menolak membeku; mereka memang dibekukan, tetapi pensinyalan antara kernel dan proses ditangani secara otomatis oleh kode penanganan sinyal (pembekuan menggunakan sinyal palsu).

Jika Anda melihat pesan “tugas yang menolak untuk dibekukan”, itu berarti bahwa utas kernel menolak untuk dibekukan, biasanya karena ia melakukan sesuatu yang tidak dapat diperiksa. Namun harus menunggu beberapa jam agar kernel untuk ditangguhkan tidak normal; tumpukan jejak dalam pesan log akan membantu untuk mendapatkan beberapa ide tentang apa yang salah.

Stephen Kitt
sumber