Список сигналів, генерованих терміналом (наприклад, Ctrl-C -> SIGINT)


31

Де я можу знайти повний перелік комбінацій клавіатур, які передають сигнали в Linux?

Наприклад:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- СИГВІТ

2
"Клавіатура" не надсилає жодних сигналів. Дізнайтеся, що таке дисципліна ліній, а потім прочитайте man 1 stty.
Satō Katsura

@SatoKatsura Лінія дисципліни - це свого роду драйвер клавіатури.
Жил "ТАК - перестань бути злим"

@Gilles Не дуже. Драйвер клавіатури займається скан-кодами тощо. Лінія дисципліни - це свого роду клей вищого рівня, який надає додатку єдиний погляд на багато інших речей, як, наприклад, модемні лінії, USB-серійні адаптери, HID-пристрої тощо
Satō Katsura,

@SatoKatsura Це частина операційної системи, яка знаходиться між додатком і клавіатурою. Іншими словами, це частина драйвера клавіатури. З апаратним терміналом (наприклад, vt100) це єдине перетворення клавіатурного вводу, яке робиться комп'ютером на відміну від самого терміналу.
Жил "ТАК - перестань бути злим"

Відповіді:


27

Лінійна дисципліна Linux N_TTY посилає лише три різних сигнали: SIGINT, SIGQUIT і SIGTSTP. За замовчуванням такі сигнали керують сигналами:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- СИГВІТ
  • Ctrl+ Z- SIGTSTP

Хм, а що з Ctrl-S і Ctrl-Q? Чи є у вас посилання на це?
Том Хейл

6
Сигнали не включаються, якщо натиснути Ctrl-S або Ctrl-Q. Вони просто пригнічують потік персонажів, не даючи їм досягти споживаючого процесу. Зрештою, коли буфери заповнюються, процес створення блокує в системному виклику запису, поки Ctrl-Q не скасує потік. Зауважте, що нормально, що запис дзвінка може блокуватись навіть без Ctrl-S: якщо процес прийому повільно споживає надіслані йому дані, наприклад, тому що він витрачає більшу частину свого часу на обробку вже отриманих даних, а не на читання нових даних .
Йохан Мірен

1
man stty | grep -C1 signalє одним з джерел для цих трьох, є єдиними сигналами, що генеруються терміналом.
Том Хейл

@TomHale ... Окрім "сигналів управління модемом", це електричні сигнали. :) На насправді, SIGINT, SIGQUITі SIGTSTPє тільки «звичайні» сигнали , що передаються по лінії дисципліни. У BSD у вас також є такі речі, як це SIGINFO, але це не стандартно.
Satō Katsura

8

Ви можете використовувати sttyдля перевірки або зміни символів, які генерують сигнали.

$ stty -a | grep -Ewoe '(intr|quit|susp) = [^;]+'
intr = ^C
quit = ^\
susp = ^Z

intr (переривати) породжує SIGINT , quitпороджує SIGQUIT, susp(призупиняє) породжує SIGTSTP. stty -aтакож буде показано такі речі, як start = ^Q; stop = ^S;і erase = ^?(backspace), які не посилають сигнали, але впливають на термінальний шар в іншому випадку.

Звичайний sttyпокаже параметри, що не використовуються за замовчуванням, і, наприклад stty intr ^Q, змінить символ переривання на, ^Qа не на ^C.

Я думаю ^L(подача форми, нова сторінка) - це не термінальна функція, а символ, який часто використовуються програмами для запиту на перемальовування подання, одночасно повторно перевіряючи розмір вікна.


1
^Lмає різне значення для різних застосувань. У більшості curses-програм (такі , як vim, less, mutt, mcі т.д.) змушує повну перерисовку (таким чином , повторно перевіривши розмір вікна), але в раковинах ( і bashт.д.) він просто очищає екран. Не бере SIGWINCHучасть.
Satō Katsura
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.