Как мне закрыть "меньше" снаружи, не оставляя мой терминал в беспорядке?
Я пишу утилиту, которая автоматически запускается 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 после вашей команды убить.