0

每当执行以下代码时,我都会进入 Defunct 僵尸进程。有人可以帮我解决这个问题。

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

    }
}

}

4

1 回答 1

0

我不认为这是问题,但尝试将运行方法更改为:

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

    }
于 2013-02-04T12:25:10.877 回答