问题描述
下边是代码,晕死了,怎么回事儿呀,没有输出结果。我是在LINUX上运行的import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class test {public static void main(String[] args) {Process process=null;Runtime rt=Runtime.getRuntime();System.out.println("start");try {process=rt.exec("ps -aux|grep tomcat");InputStream is=null;InputStreamReader isr=null;BufferedReader buffer=null;String line=null;is=process.getInputStream();isr=new InputStreamReader(is);buffer=new BufferedReader(isr);while((line=buffer.readLine())!=null){System.out.println(line+"----------");}} catch (IOException e) {e.printStackTrace();}System.out.println("end");}}就27分,上了25,分不高,能解决了,有机会再给。 问题补充:nju_abc 写道
解决方案
Process代表一个进程,你只能使用一个命令,这种linux的命令管道你需要自己把前一个进程的输入写到后一个进程。上面的例子你需要建两个Process,这里有个例子:Piping between processes
解决方案二:
引用哦,那ps -aux|grep tomcat这个命令在LINUX上执行,他最终还是会分成两个命令的,是这意思吧。 本来是要按两个命令来执行的,但是经过Runtime.exec处理后,错误的变成了三个命令,这样执行肯定不行了。
解决方案三:
API使用的不对,你可以看看Runtime.exec调用的实现,它是把传入的参数以空格分割成多个命令,然后分别执行。这样的话,上面“ps -aux|grep tomcat”根本就不再是命令了
解决方案四:
试试看这样:先等待线程执行process.waitFor()然后执行下process.getOutputStream().flush();