终端生成的信号列表(例如Ctrl-C-> SIGINT)


30

在哪里可以找到在Linux中发送信号的键盘组合的完整列表?

例如:

  • Ctrl+ C-SIGINT
  • Ctrl+ \-SIGQUIT

2
“键盘”不会发送任何信号,线路规则会发送任何信号。找出线学科是什么,然后阅读man 1 stty
聪桂

@SatoKatsura行规是一种键盘驱动程序。
吉尔斯(Gilles)'SO-不再是邪恶的'

@吉尔斯不是。键盘驱动程序处理扫描代码等。线路规程是一种高级胶水,它使应用程序可以对许多其他事物(如调制解调器线路,USB到串行适配器,HID设备等)进行统一查看。
SatōKatsura,2017年

@SatoKatsura它是操作系统的一部分,位于应用程序和键盘之间。换句话说,它是键盘驱动程序的一部分。使用硬件终端(例如vt100),这是计算机完成的唯一键盘输入转换,而不是终端本身。
吉尔斯(Gilles)'“ SO-别再作恶了”

Answers:


27

Linux N_TTY行规程仅发送三种不同的信号:SIGINT,SIGQUIT和SIGTSTP。默认情况下,以下控制字符产生信号:

  • Ctrl+ C-SIGINT
  • Ctrl+ \-SIGQUIT
  • Ctrl+ Z-SIGTSTP

嗯,Ctrl-S和Ctrl-Q呢?您对此有参考吗?
汤姆·黑尔

6
当您按Ctrl-S或Ctrl-Q时,不涉及任何信号。它们只是限制了字符流,阻止了它们进入消耗过程。最终,当缓冲区填满时,生成过程将阻塞写入系统调用,直到Ctrl-Q取消限制流为止。请注意,即使没有Ctrl-S,调用的调用也会阻塞是很正常的:如果接收过程很慢地消耗了发送给它的数据,例如,因为它花费了大部分时间来处理已接收的数据而不是读取新数据。
JohanMyréen'5

1
man stty | grep -C1 signal是这三种信号的一个来源,这是终端产生的唯一信号。
汤姆·黑尔

@TomHale ...除了“调制解调器控制信号”是电信号。:)真的,SIGINTSIGQUIT并且SIGTSTP是唯一的“正常”的信号发送由线路规程。在BSD上,您也有类似的东西SIGINFO,但这不是标准的。
桂聪聪(SatōKatsura)

8

您可以stty用来检查或更改产生信号的字符。

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

intr(中断)生成SIGINTquit生成SIGQUITsusp(挂起)生成SIGTSTPstty -a还将显示诸如start = ^Q; stop = ^S;erase = ^?(退格)之类的内容,它们不会发送信号,但会影响终端层。

Plain stty将显示非默认设置,例如stty intr ^Q将中断字符^Q改为^C

我认为^L(换页,新页)不是终端功能,而是应用程序经常使用的要求重新绘制视图,同时重新检查窗口大小的字符。


1
^L对于不同的应用具有不同的含义。在大多数curses基于应用程序(如vimlessmuttmc等),它迫使一个完整的重绘(因此重新检查窗口大小),但在弹(bash等),它只是清除屏幕。没有SIGWINCH涉及。
聪桂
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.