是终端还是外壳负责击键操作?

是终端还是外壳负责击键操作?

我不确切知道终端是否是 CTRL + C 或 CTRL + D 等击键的处理程序或 shell。

当我按下按键时,我会这样想,如图所示:

在此输入图像描述

当按下按键时,按键由 shell 处理,shell 解释按键并执行它需要执行的任何操作,可能会在CTRL + C按下时发送信号或清除屏幕CTRL + L等。因此,shell 扮演了程序输入的中间人的角色。输入从 shell 到程序的标准输入。

程序的标准输出转到 shell,然后 shell 将输出重定向到终端、文件或管道。

终端向 shell 发送按键的字节。

我对吗?

答案1

并不真地。信号等由终端驱动程序处理,因此 shell 并不真正知道您是否键入了文字 ctrl-C 还是kill从另一个窗口向其发送了相同的信号。

Keystrokes -> Terminal -> Terminal driver -> Foreground process

当 shell 不是前台进程时(例如,当您使用它启动交互式程序或实际上任何前台进程时),该程序会接收键盘输入和来自终端驱动程序的任何信号。

默认情况下,标准输入来自终端,但您可以运行 shell,其输入从文件或网络流重定向,例如,shell 并不真正知道其中的区别。类似地,shell 可以为其子进程重定向标准输入、输出和错误流,而不管是否涉及终端。

相关内容