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