файл истории растет бесконечно

424
Davide

Я считаю, что у меня та же проблема, что и у этого парня . Я на AIX, с tcsh 6.12.00

После (вероятно) неудачного выхода из системы файл истории экспоненциально увеличивался, пока квота не остановила его (и когда квота была достигнута, возникли другие проблемы с пакетными заданиями, которые не могли быть запущены из-за этого). Содержание файла истории было просто:

 9917 host: path >  Use "logout" to logout. 

повторяется во веки веков (на самом деле ~ 50 миллионов раз). Обратите внимание, что

host: path > 

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

Теперь возникли две (возможно, отдельные) проблемы:

  1. почему этот вывод поступил в файл .history (вместо этого, скажем, мой экран при выходе)
  2. почему ограничение по сохранению не было выполнено (было 5000, поэтому оно никогда не должно достигать 9917)

Единственное, что я могу думать, это процесс, чей stdout (или err) был перенаправлен туда, но это действительно странно! Есть ли у вас какие-либо понятия об этой проблеме?

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

РЕДАКТИРОВАТЬ: да, это произошло с удаленным (ssh) логином, сделанным из эмулятора X-терминала в Linux ( удаленная машина AIX, локальный linux)

РЕДАКТИРОВАТЬ: единственное, что я могу подумать, это ошибка в tcsh, которая в случае чего-то «плохого», происходящего с tty, по ошибке использует дескриптор файла .history, который должен был быть открыт только для обновления истории. Но так ли это? Там ничего не упоминается здесь

1

1 ответ на вопрос

1
Jack Lloyd

Здесь нет однозначных ответов, но есть пара случайных идей, которые могут или не могут помочь:

Фраза «Использовать» выйти из системы «для выхода из системы». звучит так, как будто tcsh получил символ EOF (^ D) и ему не понравилось, попросив вместо этого напечатать 'logout'. Так откуда же взялись все эти (гипотетические) EOF?

Вы, как человек, имеющий проблему с этим в Cygwin, используете оболочку через эмулятор X-терминала (xterm, rxvt, что угодно)? Мне интересно, происходит ли эмулятор терминала, закрывая, таким образом, закрывая ptys, к которому подключается процесс оболочки, что заставляет оболочку читать «бесконечную» серию символов EOF, после чего она вращается в бесконечность. Может быть, здесь есть какая-то гонка, когда термин «окно» закрывает магазин, прежде чем фактически уведомить оболочку о завершении сеанса?

Одной из попыток было бы выяснить, а) если tcsh в вашей конфигурации действительно принимает (или отклоняет) EOF для выхода из системы, и б) если отклоняет, определите переключатель для его разрешения.

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

Спасибо за ваш ответ (я отредактировал мой вопрос с подробной информацией о ваших комментариях). Я уже подозревал что-то подобное, но это не объясняет мои пункты 1 и 2 выше. Я попробую, но так как я не могу воспроизвести проблему, я не могу быть уверен, что решил проблему. Davide 14 лет назад 0

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