Talvez esse esquema possa esclarecer a situação. Essa é a configuração usual:
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, …)
E não há nenhuma maneira de conectar alguns novos Process3
assim:
Terminal device | (screen)<---o---[<output]--x------(stdout) Process1 Terminal (keyboard)---/-x--[input >]-o-\---->(stdin) | / \ \ | | \ '---(stdout) Process2 | | '--->(stdin) | | \ '---------------------(stdout) Process3 '--------------------->(stdin)
O que a tela (e outros) faz é alocar algum dispositivo pseudo-terminal (como o xterm) e redirecioná-lo para um ou mais terminais "reais" (físicos, virtuais ou emulados):
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)
Usando screen -x
, você pode anexar mais um terminal, xterm, o que quiser (digamos, Terminal 3
) à sessão de tela.
Portanto, não é possível se comunicar diretamente por stdin / stdout com processos anexados a um terminal diferente. Você só pode fazê-lo através do processo que está controlando este terminal se ele for um pseudo-terminal, e se este processo foi feito (como a tela é).