Process应用之惑
很多时候,我们需要调用系统命令来做些处理。比如,在程序中ping设备是否能连接,执行数据库的自动备份,以及程序的重启。这时候我们必须要使用Process类来完成这些功能。
一般情况下,我们都会将命令执行过程中的信息输出,以便检查问题。但有时候我们还需知道这个执行的进程在什么时候结束,因为不仅要知道结束了,还要知道该进程完成时返回的结果。
可能会说,这些不都是API已经给提供好的吗?过程中的消息可以用process.getInputStream()获取,进程最终结果可以由process.waitFor()得到。的确,这些看似可以办到,但其实,里面有陷阱。
首先以Runtime来创建我们需要的Process对象例子:
try {ProcessBuilder pbuilder=new ProcessBuilder("ping","192.168.0.125");pbuilder.redirectErrorStream(true);process=pbuilder.start();reader=new BufferedReader(new InputStreamReader(process.getInputStream()));String line=null;while((line=reader.readLine())!=null){System.out.println(line);}int result=process.waitFor();System.out.println(result);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}