Почему мой терминал зависает?


11

Иногда, когда мой терминал зависает, и он не позволяет мне печатать. Я не могу определить ни причины, ни как поставить диагноз. Какие-либо предложения?

Благодарность!

GNOME Terminal 2.30.2 в Ubuntu 10.04


2
обычно, когда терминал зависает, это вызвано другим приложением в фоновом режиме, использующим слишком много ресурсов, таких как процессор или дисковый ввод-вывод. Если вы работаете topв терминале, вы сможете легко найти проблему.
RolandiXor

@roland - звучит как уловка-22, но хороший совет, потому что иногда, когда один терминал завис, я могу открыть другой, и он будет работать.
Дэвид Лебауэр

Я точно знаю? :) Это что-то вроде ловушки-22, но это часто работает для меня.
RolandiXor

Ответы:


14

Хороший общий способ диагностики загадочных зависаний:

  1. откройте (другой) терминал и используйте, ps axo pid,wchan:32,cmdчтобы найти другой идентификатор процесса
  2. обратите внимание на wchanстолбец, который должен сказать вам, застрял ли он в ядре
  3. запустить sudo strace -p PIDвставив pid этого процесса; вставьте это в сообщение об ошибке или вопрос

Если в столбце wchan есть что-то, кроме тире, то процесс в ядре что-то делает. Некоторые типичные значения:

  • futex_wait_queue_me - ожидание на futex другого потока в том же процессе
  • poll_schedule_timeout - ожидание сетевого или межпроцессного взаимодействия, или просто поспать некоторое время
  • pipe_wait - чтение / запись трубы

Есть тысячи возможностей, поэтому я не могу перечислить их все. Смотрите, что такое «канал ожидания» процесса? для большего.


Очень полезно для отслеживания ошибок общего назначения. Можете ли вы обновить свой ответ с некоторым подробным описанием? Какое сообщение в столбце wchan указывает на программу, которая застряла в ядре?
Салих Эмин

Спасибо, Салих. Может быть, у нас должен быть другой вопрос о том, как вообще диагностировать зависания?
пул

Если люди интересуются любыми другими значениями wchan, пожалуйста, добавьте комментарий.
пул

Любое wchanозначает, что процесс ожидает в ядре. Если он остается там в течение долгого времени и без веских причин, таких как прослушивание сети, то он застрял. ;)
Poolie

25

Ты случайно нажал Ctrl + S? Это клавиша паузы терминала, которая останавливает весь вывод, пока вы не нажмете Ctrl-Q для возобновления.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.