4

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

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

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

1 ответ1

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 после вашей команды kill.

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