每当执行下面的代码时,我都会进入已失效的僵尸进程。有人能帮我解决这个问题吗?
private static boolean executeCommand(String command)
throws ClientException, IOException, InterruptedException {
int exitVal = 1; // 0 is success, so we default to a nonzero.
Process proc = null;
try{
Runtime rt = Runtime.getRuntime();
proc = rt.exec(command);
//Below lines are required to flush out the streams. else the process will hang.
ReadStream s1 = new ReadStream("stdin", proc.getInputStream ());
ReadStream s2 = new ReadStream("stderr", proc.getErrorStream ());
s1.start ();
s2.start ();
exitVal = proc.waitFor();
if (exitVal == 0) {
return true;
} else {
throw new ClientException("103", "" + command + " failed.");
}
}finally{
if(proc != null){
proc.destroy();
}
}
}我在单独的线程中清除所有的流。
这是我的ReadStream类
public class ReadStream implements Runnable {
private static Logger logger = Logger.getLogger(ReadStream.class);
String name;
InputStream is;
Thread thread;
public ReadStream(String name, InputStream is) {
this.name = name;
this.is = is;
}
public void start() {
thread = new Thread(this);
thread.start();
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (true) {
String s = br.readLine();
if (s == null)
break;
logger.info("[" + name + "] " + s);
}
is.close();
} catch (Exception ex) {
logger.error("Problem reading stream " + name + "... :" + ex);
}
}}
发布于 2013-02-04 20:25:11
我认为这不是问题所在,但请尝试将run方法更改为:
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
do {
String s = br.readLine();
if (s != null)
logger.info("[" + name + "] " + s);
} while (s != null);
is.close();
} catch (Exception ex) {
logger.error("Problem reading stream " + name + "... :" + ex);
}https://stackoverflow.com/questions/14684937
复制相似问题