创建了一个Process,在程序里想用一个Timer定时去监视一下该进程是否已经运行结束,该如何去判断?不能用Process.waitFor因为waitfor会引起阻塞,中间需要做别的事情。

解决方案 »

  1.   


    Runtime runtime = Runtime.getRuntime();
            Process process = null;
            try {
                process = runtime.exec("cmd /c Tasklist");            BufferedReader in = new BufferedReader(new InputStreamReader(
                        process.getInputStream()));
                String s = "";
                while ((s = in.readLine()) != null) {
                 //看看有没有想要的进程
                }
            }
      

  2.   

    如果process启动的程序也是你自己写的,那么就设置一个flag,程序即行结束时修改flag,timer就一直监视flag的值,如果程序不是你写的,那就像LZ说的,读取系统的任务list看看存在不存在你的进程(linux的话可以用ps -ef | grep来判断)
      

  3.   


    process启动的程序是自己写的,我就是不知道process什么时候结束,除了用waitfor还有什么办法判断吗?
      

  4.   

    如果process启动的程序是自己写的,可以在程序中追加对文件的处理,比如程序执行时,新建一个临时文件(或者往某个文件写入记录),程序执行结束时,删除临时文件(或者删除某个文件的记录)。你的timer可以监视临时文件是否存在(或者监视某个文件中的记录)来判断程序是否执行结束
      

  5.   

    掉一个线程去监听 进程 的运行。    public class ProcessState extends Thread {        public ProcessState(Process p) {
                process = p;
            }        @Override
            public void run() {
                try {
                    process.waitFor();
                } catch (InterruptedException ex) {
                    throw new RuntimeException();
                }
            }        public void startListen() {
                start();
            }        public boolean isExit() {
                switch (getState()) {
                    case NEW:
                        throw new RuntimeException();
                    case TERMINATED:
                        return true;
                    default:
                        return false;
                }
            }
            private Process process;
        }
      

  6.   

    process.waitFor();程序不是就阻塞了吗?
      

  7.   

    最后还是用runtime.exec("cmd /c Tasklist");来做了,但是现在运行的程序时间比较短都永远都是找不到的状态结贴了