2011-12-13 24 views
1

我使用连接到“/斌/庆典”在Ubuntu:发送控制charactors到外部进程中的Java

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

这里cmd是与我读取和写入过程不同的命令字符串。
现在,我所遇到的情况,在那里我登录到使用ssh远程machiens同时从远程机器阅读来转过程中写入信息,对于洛出去,我要送控制字符,如:为了

CTRL + ]到正常退出会话并返回到本地计算机。假设cmd是字符串类型,我怎样才能将这个CTRL字符写入进程?

+0

你的意思是'CTRL + d'? – Bruno

+0

实际上在xen虚拟机上它是CTRL +],但是无论哪种方式我对CTRL – Johnydep

+0

感兴趣你试过发送CTRL(17)然后](93)吗?我的意思是把这些整数写入进程的输入流? – AlexR

回答

5

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(); 

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

os.close(); 
+0

谢谢,writer.write(“\ 035”)就像一个魅力,但小数点不起作用。但无论如何它解决了这个问题。其实我是ssh'ing虚拟机在另一台机器上运行,并回到原来的提示,我需要这个CTR +]退出不起作用。 – Johnydep