Как мне закрыть "меньше" снаружи, не оставляя мой терминал в беспорядке?

Я пишу утилиту, которая автоматически запускается less как подкоманда с ее выводом. Иногда происходит ошибка при записи вывода, и я хотел бы автоматически закрыть less и выведите ошибку нормально. Однако независимо от того, какой сигнал я пытаюсь отправить less процесс, он либо игнорирует его, либо закрывает "нечисто", т.е. он оставляет мой терминал непригодным для использования. (Однако я могу исправить терминал, нажав Ctrl+C и написав (вслепую) команду stty sane.)

Я перепробовал все "обычные" сигналы: SIGINT, SIGTERM, SIGQUIT а также SIGKILL, Последний явно не сработает, но я все равно попробовал. Я не могу найти ничего о сигналах на страницах руководства для less,

Можно ли выйти less чисто снаружи?

1 ответ

В зависимости от настроек управления заданиями, вы можете сначала выполнить kill -tstp к less программа, затем kill -9, Первый сигнал пойман less и заставляет его восстанавливать tty перед повторной выдачей сигнала на себя, что обычно заставляет его остановиться в фоновом режиме. Однако, если обработчик по умолчанию для SIGTSTP должен игнорировать его, less просто продолжим и снова установим терминал в raw.

Вы могли бы рассмотреть возможность запуска less в отдельном терминале, например xterm -e sh -c "less /myfile", тогда ты можешь kill -9 это без необходимости очистки.

Вы также можете запустить less --quit-on-intr (или же -K) и затем он будет корректно завершен в SIGINT, хотя это также повлияет на ваше обычное взаимодействие с выходным потоком.

В противном случае просто stty sane; tput reset после вашей команды убить.

Другие вопросы по тегам