也许这些架构可以澄清这种情况。这是通常的设置:
Terminal (/dev/ttyX or /dev/pts/x)
device
|
(screen)<--[<output]----x-------(stdout) Process1
Terminal (keyboard)---[input >]---o-\----->(stdin)
\ \
(hardware console or \ `----(stdout) Process2
virtual console or terminal `---->(stdin)
emulators like xterm, …)
而且没有办法Process3
像这样插入一些新的东西:
Terminal
device
|
(screen)<---o---[<output]--x------(stdout) Process1
Terminal (keyboard)---/-x--[input >]-o-\---->(stdin)
| / \ \
| | \ `---(stdout) Process2
| | `--->(stdin)
| |
\ `---------------------(stdout) Process3
`--------------------->(stdin)
屏幕(和其他屏幕)的作用是分配一些伪终端设备(如xterm一样)并将其重定向到一个或多个“真实”终端(物理的,虚拟的或仿真的):
Terminal pseudo
devices ,--> Terminal (/dev/pts/x)
| _______/ device
Terminal <--[<output]--- | | |
1 ---[input >]--> |screen | <--[<output]---x-----(stdout) Process1
|Process| ---[input >]--o-\--->(stdin)
Terminal <--[<output]--- | | \ \
2 ---[input >]--> |_______| \ `--(stdout) Process2
`-->(stdin)
使用,screen -x
您可以将另一个终端xterm附加Terminal 3
到屏幕会话上。
因此,不能,您无法通过stdin / stdout与连接到另一个终端的进程直接通信。如果它恰好是伪终端,并且确信该过程确实是这样做的,则只能通过控制此终端的过程来做到这一点(如屏幕所示)。