stdin / stdout用于从shell启动的命令

时间:2014-11-10 10:43:15

标签: linux shell

关于字符在输入终端时回显的一个非常基本的问题。

考虑一个Linux系统,在该系统上从shell发出cat命令(例如bash)。现在,根据我的理解,shell会生成一个执行cat可执行文件的进程,在这个阶段,cat stdin和stdout会附加到终端。

现在的问题是:shell是否继续从终端接收字符(最终回显它们)或仅仅是产生的进程(执行cat)?

4 个答案:

答案 0 :(得分:2)

shell会将文件描述符(fd' s)传递给子进程(cat),但也会传输控制权。因此,只要cat正在运行,shell就不会做任何事情,也不会接收输入,依此类推。

从技术上讲,shell forkexec是子fork中的子进程,然后wait s用于子进程完成。完成后,shell将等待更多输入(允许您键入下一个命令),然后运行该等等。

答案 1 :(得分:1)

前台进程接收来自终端的输入。前景中的哪个进程是唯一接收它的进程(除非它包含内部逻辑以将其传递给另一个进程)。

答案 2 :(得分:1)

shell不接收字符,只接收前台进程。但那不是全部。

您输入的内容首先由终端设备驱动程序处理。驱动程序有两种工作模式:规范和非规范。在运行cat时使用的规范模式中,驱动程序在您键入字符时会回显字符并累积文本行。这允许一些基本编辑,例如使用退格键删除您键入的内容。在按Enter或Ctrl-D之前,cat无法查看您键入的内容。

在非规范模式下,终端只是将字符传递给流程而不进行解释或修改:这就是全屏应用程序的工作方式。

答案 3 :(得分:0)

感谢您的回复,

我做了一个"实验"迫使终端(腻子)本地回声。将cat发送到shell并发送我可以看到的字符

〜#cat

您好

您好

〜#

我输入的每个字符(' h''''''' o')我可以在终端屏幕上看到每一个然后按回车键我可以看到整个单词"你好"。

现在,IUUC,屏幕上出现的第一个字符是由于规范模式'终端设备驱动程序(驱动程序回声)。然后,当我点击返回累积的行'你好'是"见过"通过cat并从它发送到stdout(终端屏幕再次)

有意义吗?