java的进程

以前总以为java的Runtime.exec()方法会开启一个新的jvm实例,也就是一个新的进程,今天通过程序验证才知道原来这个新的进程只是原来的jvm实例的一个子进程而已。为了说明问题,现在先写一个简单的例子:

       public class ProcessJar{

              public static void main(String []args)throws Exception{

                        System.out.println("execute jar file.");

              }

       }

将这个java文件打包成proc.jar,放置在D:\\test\\proc.jar目录,现在写我们的测试程序:

     public class ProcessTest {

           public static void main(String []args)throws Exception{

                 String cmd="java -jar d:\\test\\proc.jar";
                 Runtime.getRuntime().exec(cmd);
            }
      }
当我们运行ProcessTest时会发现控制台并没有输出“execute jar file.”,所以这就说明了两个程序的运行已经不在同一个进程中了,为了看到ProcessJar的运行结果,我们可以通过获取输入流的方式,加上如下代码即可:

          InputStream in=proc.getInputStream();

          BufferedReader br=new BufferedReader(new InputStreamReader(in));

由于子进程的运行和父进程是异步的,所以很多情况下,我们往往想让子进程把运行结果告知父进程,或者说让父进程等待子进程执行完成,也就是指同步执行,这就需要使用Process类提供的一个方法:waitFor(),这个方法会阻塞当前线程的执行,知道子进程执行结束,如果子进程正常结束会返回0,否则子进程异常退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值