use*_*244 18 gnu-screen terminal-multiplexer terminal
因此,假设您将 Linux 安装一直引导到桌面。你启动了一个 gnome-terminal/konsole/whatever,所以你有一个 tty 来输入命令。
现在假设我通过 SSH 连接到同一台机器。它会将我绑定到另一个 tty 以输入命令。
现在假设我想将我的 tty 从我原来的 SSH 一个“切换”到更早开始的 gnome-terminal 一个。
基本上我在问是否有任何方法可以做同样的事情screen -x
但没有屏幕?
我知道您可以通过将某些内容回显到 /dev 文件中来轻松地将输出发送到另一个 tty,但我不知道如何“查看”tty 中的内容。
有任何想法吗?
Sté*_*nez 17
也许这些模式可以澄清情况。这是通常的设置:
Run Code Online (Sandbox Code Playgroud)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
像这样插入一些新的:
Run Code Online (Sandbox Code Playgroud)Terminal device | (screen)<---o---[<output]--x------(stdout) Process1 Terminal (keyboard)---/-x--[input >]-o-\---->(stdin) | / \ \ | | \ `---(stdout) Process2 | | `--->(stdin) | | \ `---------------------(stdout) Process3 `--------------------->(stdin)
screen(和其他)所做的是分配一些伪终端设备(如 xterm 所做的)并将其重定向到一个或多个“真实”终端(物理、虚拟或模拟):
Run Code Online (Sandbox Code Playgroud)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 与连接到不同终端的进程进行通信。如果它恰好是一个伪终端,并且这个进程被认为这样做(就像 screen 一样),你只能通过控制这个终端的进程来这样做。
没有肮脏的技巧,就不可能将另一个终端上的进程重新连接到您当前的终端。可以通过强制进程执行某些系统调用(使用ptrace
);这会导致一些程序崩溃。有几种工具可以做到这一点,例如neercs
, retty
, cryopid
, reptyr
, ...; 请参阅如何将其否认为正在运行的进程并将其关联到新的屏幕外壳?和相关问题。
获取已经显示在另一个终端上的输出是一个不同的问题。没有完全通用的解决方案:原则上,一旦输出被渲染,终端可能只将其存储为图像。实际上,所有 X 终端仿真器都以文本形式保存它们的输出缓冲区,以便您可以复制粘贴它。获取该输出的方式取决于终端模拟器;基本思想是模拟选择整个回滚缓冲区。对于 Linux 控制台,例如/dev/tty1
,回滚缓冲区很容易获得/dev/vcs1
(并/dev/vcsa1
带有文本属性)。
简单的答案是,如果您想从不同的地方重新连接到终端,请使用screen
或tmux
。
归档时间: |
|
查看次数: |
37377 次 |
最近记录: |