屏幕无法释放 pty

屏幕无法释放 pty

在我的 Linux 机器上,使用时,screen我可以用 打开、读取和写入伪终端。关闭它(Ca ky)后,如果不重新启动提供伪终端的,screen我将无法再次连接到它。socat

刚开始之后socat事情是这样的:

 /home/kidmose $ fuser /dev/pts/9
/dev/pts/9:          20960
 /home/kidmose $ lsof /dev/pts/9
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
socat   20960 kidmose    5u   CHR  136,9      0t0   12 /dev/pts/9

我可以按预期进行书写和阅读:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 
uname -a
Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

启动screen也有效一次(我可以写入和读取预期的输出):

 /home/kidmose $ screen /dev/pts/9
uname -a # My input
Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux # Response
(C-a k y) # I kill the window and screen terminates ([screen is terminating])

现在我既无法连接screen也无法书写。Screen 立即退出[screen is terminating],当我尝试书写时出现以下错误:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 
bash: /dev/pts/9: Device or resource busy

一些信息:

 /home/kidmose $ fuser /dev/pts/9
/dev/pts/9:          20960
 /home/kidmose $ lsof /dev/pts/9
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
socat   20960 kidmose    5u   CHR  136,9te      0t0   12 /dev/pts/9
 /home/kidmose $ 

知道为什么它‘忙碌’/不可用吗?

我注意到输出te中出现了“ ” lsof。有什么解释吗?

我的最终目标是在远程设备上拥有虚拟终端。由于 NAT 等原因,我需要远程设备调用虚拟终端所在的服务器。

编辑:正如 lemonsqueeze 在他的评论

[A: sh -> socat] --> [B: socat -> pty -> screen]
   Machine A     TCP        Machine B

答案1

建议:在这种情况下,我会选择反向 SSH联系:

不是您的机器执行 ssh,而是服务器机器执行 ssh,并通过端口转发确保您可以 ssh 返回服务器机器。

但这肯定不如自己用 socat 构建那么有趣。我还是建议彻底弄清楚这个 pty 问题,这是一种很好的学习方式。

相关内容