如何通过套接字将`eof`信号发送到远程shell中运行的命令?

时间:2015-08-15 09:56:18

标签: linux sockets python-3.x signals

  

如何通过套接字将eof信号发送到在远程shell中运行的命令?

我在Python中使用套接字编程,这是一个远程shell应用程序,我发送命令在另一台PC上执行。

一切正常(对于大多数命令而言),除了像cat > file这样的命令导致我出现问题。

通常,我会使用CTRL + Deof信号)终止上面的命令,但是在我的客户端中按CTRL + D,不会将信号发送到远程shell。因此,我无法终止命令,而且我被卡住了。

有人有建议吗?

1 个答案:

答案 0 :(得分:4)

eof不是信号,但是当您输入 ctrl-d 时,tty驱动程序将其实现为读取长度为0.

如果您的遥控器没有在tty中运行,那么您就无法生成eof,因为您无法发送读取长度为0的数据包。但是,如果您运行类似script /dev/null的程序作为您的遥控器中的第一个命令shell,然后这会将你的shell包含在一个伪tty中,你将能够发送一个真正的 ctrl-d 字符(十六进制0x04),pty会将它转换为eof并结束一只猫, 例如。发送stty -a到遥控器以检查你的pty中是否启用了eol。

我的终端上的

stty -alnext = ^V(文字 - 下一个字符)所以我可以输入 ctrl -v ctrl-d 来输入真正的十六进制0x04字符。

我选择了script因为我知道它有效地在通信中设置了伪tty,并且对数据流没有任何作用。这不是它的最初目的(参见其手册页),但这无关紧要。