«Клавиатура» не посылает никаких сигналов, дисциплина линии делает. Узнайте, что такое дисциплина, затем прочитайте man 1 stty.
Satō
@SatoKatsura Линейная дисциплина является своего рода драйвером клавиатуры.
Жиль "ТАК - прекрати быть злым"
@ Жиль Не совсем. Драйвер клавиатуры работает со скан-кодами и тому подобным. Дисциплина линии - это своего рода клей более высокого уровня, который дает приложению единое представление о многих других вещах, таких как модемные линии, адаптеры USB-to-serial, устройства HID и т. Д.
Satō
@SatoKatsura Это часть операционной системы, которая находится между приложением и клавиатурой. Другими словами, это часть драйвера клавиатуры. С аппаратным терминалом (например, vt100) это единственное преобразование ввода с клавиатуры, которое выполняется компьютером, в отличие от самого терминала.
Жиль "ТАК - перестань быть злым"
Ответы:
27
Линейная дисциплина Linux N_TTY посылает только три разных сигнала: SIGINT, SIGQUIT и SIGTSTP. По умолчанию следующие управляющие символы генерируют сигналы:
Хм, а как насчет Ctrl-S и Ctrl-Q? У вас есть ссылка на это?
Том Хейл,
6
При нажатии Ctrl-S или Ctrl-Q сигналы не включаются. Они просто душат поток персонажей, не позволяя им достичь процесса потребления. В конце концов, когда буферы заполняются, производящий процесс блокирует системный вызов write до тех пор, пока Ctrl-Q не сгладит поток. Обратите внимание, что это нормально для вызова для записи может блокировать даже без Ctrl-S: если процесс приема медленный, чтобы потреблять отправленные ему данные, например, потому что он тратит большую часть своего времени на обработку уже полученных данных вместо чтения новых данных ,
Йохан Мирен
1
man stty | grep -C1 signalодин источник для этих трех, являющихся единственными сигналами, генерируемыми терминалом.
Том Хейл,
@TomHale ... Кроме "сигналов управления модемом" есть электрические сигналы. :) На самом деле, SIGINT, SIGQUITи SIGTSTPявляются только «обычные» сигналы , передаваемые по линии дисциплины. На BSD у вас тоже есть такие вещи SIGINFO, но это не стандартно.
Satō
8
Вы можете использовать sttyдля проверки или изменения символов, которые генерируют сигналы.
intr(прерывание) генерирует SIGINT, quitгенерирует SIGQUIT, susp(приостановить) генерирует SIGTSTP. stty -aтакже покажет такие вещи, как start = ^Q; stop = ^S;и erase = ^?(возврат), которые не отправляют сигналы, но влияют на уровень терминала в противном случае.
Обычный sttyпокажет нестандартные настройки и, например stty intr ^Q, изменит символ прерывания на ^Qвместо ^C.
Я думаю ^L(подача формы, новая страница) - это не терминальная функция, а символ, часто используемый приложениями для запроса перерисовки представления, одновременно перепроверяя размер окна.
^Lимеет разное значение для разных приложений. В большинстве curses-приложений (такие , как vim, less, mutt, mcи т.д.) заставляет полную перерисовку (таким образом , повторно проверив размер окна), но в раковинах ( и bashт.д.) он просто очищает экран. Там не SIGWINCHучаствует.
man 1 stty
.Ответы:
Линейная дисциплина Linux N_TTY посылает только три разных сигнала: SIGINT, SIGQUIT и SIGTSTP. По умолчанию следующие управляющие символы генерируют сигналы:
источник
man stty | grep -C1 signal
один источник для этих трех, являющихся единственными сигналами, генерируемыми терминалом.SIGINT
,SIGQUIT
иSIGTSTP
являются только «обычные» сигналы , передаваемые по линии дисциплины. На BSD у вас тоже есть такие вещиSIGINFO
, но это не стандартно.Вы можете использовать
stty
для проверки или изменения символов, которые генерируют сигналы.intr
(прерывание) генерируетSIGINT
,quit
генерируетSIGQUIT
,susp
(приостановить) генерируетSIGTSTP
.stty -a
также покажет такие вещи, какstart = ^Q; stop = ^S;
иerase = ^?
(возврат), которые не отправляют сигналы, но влияют на уровень терминала в противном случае.Обычный
stty
покажет нестандартные настройки и, напримерstty intr ^Q
, изменит символ прерывания на^Q
вместо^C
.Я думаю
^L
(подача формы, новая страница) - это не терминальная функция, а символ, часто используемый приложениями для запроса перерисовки представления, одновременно перепроверяя размер окна.источник
^L
имеет разное значение для разных приложений. В большинствеcurses
-приложений (такие , какvim
,less
,mutt
,mc
и т.д.) заставляет полную перерисовку (таким образом , повторно проверив размер окна), но в раковинах ( иbash
т.д.) он просто очищает экран. Там неSIGWINCH
участвует.