当我开始像这样的过程时process= Runtime.getRuntime().exec("gnome-terminal");
,它启动 shell 执行,我想停止 shell 执行并想从进程重定向 I/O,有人能告诉我如何做到这一点吗?
我的代码是:
public void start_process()
{
try
{
process= Runtime.getRuntime().exec("bash");
pw= new PrintWriter(process.getOutputStream(),true);
br=new BufferedReader(new InputStreamReader(process.getInputStream()));
err=new BufferedReader(new InputStreamReader(process.getErrorStream()));
}
catch (Exception ioe)
{
System.out.println("IO Exception-> " + ioe);
}
}
public void execution_command()
{
if(check==2)
{
try
{
boolean flag=thread.isAlive();
if(flag==true)
thread.stop();
Thread.sleep(30);
thread = new MyReader(br,tbOutput,err,check);
thread.start();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage()+"1");
}
}
else
{
try
{
Thread.sleep(30);
thread = new MyReader(br,tbOutput,err,check);
thread.start();
check=2;
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage()+"1");
}
}
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
command=tfCmd.getText().toString().trim();
pw.println(command);
execution_command();
}
当我在文本字段中输入一些命令并按执行按钮时,输出文本区域上没有显示任何内容,我如何停止 shell 执行并重定向输入和输出?
来自Javadoc:
The ProcessBuilder.start()
and Runtime.exec()
方法创建一个本机进程并返回一个子类的实例Process
可用于控制过程并获取有关过程的信息。班上Process
提供从进程执行输入、向进程执行输出、等待进程完成、检查进程的退出状态以及销毁(终止)进程的方法。
创建进程的方法可能不适用于某些本机平台上的特殊进程,例如本机窗口进程、守护进程、Microsoft Windows 上的 Win16/DOS 进程或 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout、stderr)操作都将通过三个流重定向到父进程(getOutputStream()
, getInputStream()
, getErrorStream()
)。父进程使用这些流向子进程提供输入并从子进程获取输出。由于某些原生平台只为标准输入输出流提供有限的缓冲区大小,因此未能及时写入子进程的输入流或读取子进程的输出流可能会导致子进程阻塞,甚至死锁。
换句话说,在将缓冲流读取器连接到之后process.getInputStream()正如您所做的那样,您应该读取其所有输出以使其正常运行。
Update: 这是一个简单的例子怎么做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)