В Linux внезапно исчезают все окна терминала [закрыто]

Заранее извините за стену текста. У меня проблема, из-за которой я не могу понять, что может происходить. Кроме того, я прошу прощения, если ServerFault не является идеальным местом для этого вопроса, но я не думаю, что StackOverflow будет подходящим, потому что он не кажется проблемой с моим кодом как таковым, так что поскольку я просто как-то перегружал систему своей тестовой настройкой.

Предпосылки

Я работаю над драйвером ядра для платы PCIe. Машина, на которой я работаю, имеет что-то вроде 24 ядра и довольно большой объем оперативной памяти. Он работает под управлением RHEL 5.7 с ядром Linux 2.6.18. Извините, я не знаю точных характеристик, потому что до сих пор это не имело значения, и я не подумал проверить, прежде чем я ушел с работы сегодня. Это машина для разработки, и мой драйвер (и связанные с ним тестовые утилиты) - единственное, что на ней работает. Я не буду вдаваться в подробности об устройстве или драйвере, потому что они не кажутся причиной проблемы, но в основном устройство имеет 4 отдельных последовательных интерфейса RS-232 на нем, и мой драйвер создает четырехсимвольные устройства с соответствующими узлами устройств в / dev /. Драйвер также создает многочисленные атрибуты sysfs. Некоторые из атрибутов предназначены для отображения / установки различных регистров на плате, а другие атрибуты представляют собой фактические данные телеметрии, извлекаемые из данных, полученных на одном из последовательных портов. Edit: Если задуматься, атрибуты sysfs данных телеметрии создаются и управляются через API ядра hwmon .Не уверен, что это может иметь какое-либо отношение к этому, но на данный момент я не знаю, какие детали могут оказаться важными.

Пытаясь нагрузить драйвер и заставить все работать на максимуме, я открыл множество окон терминала: четыре окна запускают шестнадцатеричный дамп на каждом из символьных устройств, еще четыре окна непрерывно сбрасывают содержимое. атрибутов sysfs, представляющих регистр устройства для каждого из последовательных портов, и еще одно окно, непрерывно сбрасывающее атрибуты sysfs, связанные с телеметрией. У меня также было окно, работающее top , и другое работающее watch 'dmesg | tail -40 ', чтобы просмотреть любую отладочную информацию, которую генерирует мой драйвер (что немного - просто такие вещи, как открытие / закрытие chardev, любые ошибки и т. д.).

Проблема

Примерно через 15-20 минут работы ВСЕ окна моего терминала внезапно исчезают, все сразу. Нет всплывающих окон с ошибками, и dmesg ничего не показывает, кроме сообщения моего драйвера о том, что символьные устройства были закрыты. Система остается стабильной. Я могу открывать новые окна и т. Д. И мой водитель, кажется, просто продолжает гудеть, как будто ничего не произошло. С точки зрения драйвера это выглядит так, как будто все четыре процесса hexdump завершились сразу, и моя функция закрытия не сообщила об ошибках.

Я искал в Google, на форумах и на подобных сайтах, но пока не нашел ничего хотя бы отдаленно похожего на то, что я вижу.Это как если бы возникла какая-то ошибка, из-за которой Linux решил, что ему нужно убить все мои процессы сразу. Я думал, что, возможно, исчерпаны какие-то ресурсы, такие как память, файловые дескрипторы и т. Д., Но такие утилиты, как top , vmstat , lsof , iostat (не уверен, как это будет иметь отношение к чему-либо, но я все равно проверил это), похоже, не показывает ничего необычного. В системе есть что-то вроде 20 ядер ЦП и кучи оперативной памяти, и со всем этим, кажется, что она не потеет. То есть до тех пор, пока все мои процессы не умрут окончательно.

Я не знаю, что проверить дальше. Я думаю, что, возможно, отслеживание нескольких десятков атрибутов sysfs одновременно, сброс их всех как можно быстрее может быть не тем, для чего sysfs был разработан, но система, похоже, не дает мне никаких указаний на то, что с этим есть проблема , и у моего драйвера, похоже, нет проблем с постоянным натиском вызовов sysfs "show", при этом ему удается не пропустить ни одной доли с символьными устройствами (все данные выглядят хорошо).

Еще одна вещь, о которой я должен упомянуть (хотя я не уверен, насколько это может быть актуально), - это то, что я пробовал это в немного другой конфигурации, когда два из четырех последовательных портов имели коннекторы обратной связи, а вместо этого Чтобы запустить hexdump на этих двух символьных устройствах, я запустил свою собственную утилиту для проверки коэффициента битовых ошибок. Всего я пробовал это 4 раза, и каждый раз результат был один и тот же. Примерно через 15 минут (плюс-минус 5 минут) все окна терминала сразу закрываются, драйвер продолжает работать нормально, и в выводе dmesg нет абсолютно ничего необычного.

Есть идеи, что могло вызвать что-то подобное?

TL; DR: Все мои окна терминала самопроизвольно закрываются, без видимых указаний на то, что пошло не так. Система остается стабильной, и в выводе dmesg нет ничего необычного. Это на RHEL 5.7.

-1
задан 18 July 2014 в 09:55
2 ответа

Какой именно терминал вы используете? Вы знаете, что некоторые из причудливых GUI-терминалов, входящих в состав десктопных менеджеров, на самом деле являются многопоточным процессом. Так что есть одно контейнерное приложение, которое содержит все дочерние терминалы. Оно используется для предоставления вам таких возможностей, как окно с терминалами во вкладках.

Если в одном терминале есть ошибка, которая приводит к сбою мастер-процесса, вы теряете все. Вы можете попробовать использовать xterm вместо того терминала, который вы используете. Или убедитесь, что вы вызываете свой терминал таким образом, что каждый из них является отдельным процессом, см. страницу man для вашего терминала.

.
1
ответ дан 5 December 2019 в 19:56

проверка /var/log/, прочтите там каждый лог-файл по таймингу, сходному с закрытием терминалов.

Если вы не можете найти там ничего полезного или связанного с ними, попробуйте другое терминальное решение. Например, вместо kconsole xterm

В качестве альтернативы тестирования увеличить размер буфера самого терминала. (в зависимости от того, что именно вы используете, может быть немного хитро, но google должен помочь)

У меня была похожая проблема несколько лет назад, когда kconsole больше не показывала данные при запущенном tail -f. Для меня это оказалось ошибкой буфера.

0
ответ дан 5 December 2019 в 19:56

Теги

Похожие вопросы