关于字符在输入终端时回显的一个非常基本的问题。
考虑一个Linux系统,在该系统上从shell发出cat命令(例如bash)。现在,根据我的理解,shell会生成一个执行cat可执行文件的进程,在这个阶段,cat stdin和stdout会附加到终端。
现在的问题是:shell是否继续从终端接收字符(最终回显它们)或仅仅是产生的进程(执行cat)?
答案 0 :(得分:2)
shell会将文件描述符(fd' s)传递给子进程(cat
),但也会传输控制权。因此,只要cat
正在运行,shell就不会做任何事情,也不会接收输入,依此类推。
从技术上讲,shell fork
和exec
是子fork中的子进程,然后wait
s用于子进程完成。完成后,shell将等待更多输入(允许您键入下一个命令),然后运行该等等。
答案 1 :(得分:1)
前台进程接收来自终端的输入。前景中的哪个进程是唯一接收它的进程(除非它包含内部逻辑以将其传递给另一个进程)。
答案 2 :(得分:1)
shell不接收字符,只接收前台进程。但那不是全部。
您输入的内容首先由终端设备驱动程序处理。驱动程序有两种工作模式:规范和非规范。在运行cat
时使用的规范模式中,驱动程序在您键入字符时会回显字符并累积文本行。这允许一些基本编辑,例如使用退格键删除您键入的内容。在按Enter或Ctrl-D之前,cat
无法查看您键入的内容。
在非规范模式下,终端只是将字符传递给流程而不进行解释或修改:这就是全屏应用程序的工作方式。
答案 3 :(得分:0)
感谢您的回复,
我做了一个"实验"迫使终端(腻子)本地回声。将cat发送到shell并发送我可以看到的字符
〜#cat
您好
您好
〜#
我输入的每个字符(' h''''''' o')我可以在终端屏幕上看到每一个然后按回车键我可以看到整个单词"你好"。
现在,IUUC,屏幕上出现的第一个字符是由于规范模式'终端设备驱动程序(驱动程序回声)。然后,当我点击返回累积的行'你好'是"见过"通过cat并从它发送到stdout(终端屏幕再次)
有意义吗?