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