1

Я считаю, что у меня та же проблема, что и у этого парня. Я на 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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .