当后台进程输出到 stdout 以出现在终端上时,输出是否会被视为前台进程的 stdin 输入?请注意,后台进程和前台进程不是通过管道关联的。
我有这个问题,因为当前台进程等待标准输入输入时,我可以在终端中输入来输入它。后台进程的标准输出输出似乎做了同样的事情,即后台进程在终端中“键入”,而前台进程正在等待 stdin 输入。那么为什么前台进程不将后台进程的 stdout 输出作为 stdin 输入呢?
以我的经验来看,似乎没有。如果我是对的,为什么不呢?
答案1
终端在概念上与进程stdin
和是分开的stdout
。这可能会令人困惑,因为我们谈论键盘输入和屏幕输出的“终端”。
但是,进程可以从键盘读取输入,而无需将其回显到屏幕。例如,当您登录时,系统会从您键入的输入中读取您的密码,但它不会出现在屏幕上。
当然,进程可以将输出打印到屏幕上,而无需您在键盘上键入。
可以(例如使用tee
)将输出流写入屏幕和将其传递给另一个进程,但这并不会使它们相同。
简而言之,在屏幕上打印内容与在键盘上输入内容不同,尽管我们使用“终端”这个词来描述两者。
答案2
不,因为标准输入和标准输出是单独的通道。除非您显式使用管道,否则没有连接。您不希望 print 语句的输出成为后续输入语句的输入,对吗?