Mengapa terminal saya membeku?

11

Kadang-kadang ketika terminal saya macet dan tidak akan membiarkan saya mengetik. Saya tidak dapat mengidentifikasi penyebab apa pun, maupun cara mendiagnosis. Ada saran?

Terima kasih!

Terminal GNOME 2.30.2 pada Ubuntu 10.04

David LeBauer
sumber
2
biasanya ketika terminal macet itu disebabkan oleh aplikasi lain di latar belakang menggunakan terlalu banyak sumber daya, seperti CPU atau Disk I / O. Jika Anda menjalankan topdi terminal, Anda harus dapat menemukan masalahnya dengan mudah.
RolandiXor
@roland - terdengar seperti tangkapan-22, tapi saran yang bagus karena kadang-kadang ketika satu terminal dibekukan saya bisa membuka yang lain dan itu akan berhasil.
David LeBauer
Saya tau? :) Ini sedikit menangkap-22, tetapi sering berhasil bagi saya.
RolandiXor

Jawaban:

14

Cara umum yang baik untuk mendiagnosis hang misterius:

  1. buka terminal (nother), dan gunakan ps axo pid,wchan:32,cmduntuk menemukan id proses lainnya
  2. catat wchankolomnya, yang akan memberi tahu Anda apakah macet di kernel
  3. jalankan sudo strace -p PIDmemasukkan pid dari proses itu; rekatkan itu ke dalam laporan bug atau pertanyaan

Jika ada sesuatu selain hanya tanda hubung di kolom wchan, maka prosesnya di kernel melakukan sesuatu. Beberapa nilai khas:

  • futex_wait_queue_me - menunggu futex untuk utas lain dalam proses yang sama
  • poll_schedule_timeout - menunggu jaringan atau komunikasi antarproses, atau hanya tidur sebentar
  • pipe_wait - membaca / menulis pipa

Ada ribuan kemungkinan jadi saya tidak bisa mendaftar semuanya. Lihat Apa "Saluran Tunggu" dari suatu proses? untuk lebih.

poolie
sumber
Sangat berguna untuk pelacakan bug untuk tujuan umum. Bisakah Anda memperbarui jawaban Anda dengan deskripsi yang luas? Pesan apa di kolom wchan yang menunjukkan program yang macet di kernel?
Salih Emin
Terima kasih, Salih. Mungkin kita harus memiliki pertanyaan lain tentang bagaimana secara umum untuk mendiagnosis hang?
poolie
Jika orang ingin tahu tentang nilai wchan lainnya, silakan tambahkan komentar.
poolie
Apa pun wchanartinya proses sedang menunggu di kernel. Jika tetap di sana untuk waktu yang lama dan tanpa alasan yang bagus seperti mendengarkan jaringan io, maka macet. ;)
poolie
25

Apakah Anda menekan Ctrl + S secara kebetulan? Kunci jeda terminal inilah yang menghentikan semua output hingga Anda menekan Ctrl-Q untuk melanjutkan.

Marius Gedminas
sumber