在Java中将控制特征发送到外部进程

我在ubuntu中连接到“/ bin / bash”使用:

process = Runtime.getRuntime().exec(cmd); 

这里cmd是一个带有不同命令的String,我从进程读取和写入。
现在我遇到了一种情况,我使用ssh登录远程机器人,同时读取写入信息到ext进程,为了从远程机器登出,我必须发送控制字符,如:

CTRL + ]以便优雅地注销会话并返回本地计算机。 假设cmd是String类型,我如何将此CTRL字符写入进程?

ASCII中的Control-]相当于035八进制。 在Java中,您可以将其表示为“\ 035”。

 Writer writer = new OutputStreamWriter(process.getOutputStream()); writer.write("\035"); writer.flush(); 

它也等于29的十进制值,所以如果你可以写一个值为29的字节,那么它也可以工作。

 OutputStream os = process.getOutputStream(); os.write(29); os.flush(); 

我假设Control-]与远程程序有关。 你在谈论telnet? 但是写“exit \ n”也会关闭远程bash。

 Writer writer = new OutputStreamWriter(process.getOutputStream()); writer.write("exit\n"); writer.flush(); 

显然,您也可以关闭OutputStream来关闭远程进程的STDIN。

 os.close(); 
Interesting Posts