Java Process类的详解及实例代码

所属分类: 软件编程 / java 阅读数: 43
收藏 0 赞 0 分享

Java Process类的详解

前言:

      今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档。

      对Process类的简要说明:

     Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入、执行输出到进程、等待进程的完成和检查进程的退出状态及销毁进程的方法

     ProcessBuilder.start()和Runtime.exec方法创建一个本机进程并返回Process子类的一个实例,该实例可以控制进程并获取相关的信息

     其它的概要请参考JDK文档

     下面就开始举几个简单的示例:

     (1)执行简单的DOS命令,如打开一个记事本

package com.iwtxokhtd.other;  
 
import java.io.IOException;  
 
public class ProcessTest {  
 
  public static void main(String[] args) {  
    try {  
            Process proc=Runtime.getRuntime().exec("notepad");  
    } catch (IOException e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    }  
 
  }  
 
} 

package com.iwtxokhtd.other; 
 
import java.io.IOException; 
 
public class ProcessTest { 
 
  public static void main(String[] args) { 
    try { 
            Process proc=Runtime.getRuntime().exec("notepad"); 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
 
  } 
 
} 

 (2)使用它的其它构造方法执行相关的命令,如下例:

package com.iwtxokhtd.other;  
 
import java.io.IOException;  
 
public class ProcessTest {  
 
  public static void main(String[] args) {  
    try {  
        
      String exeFullPathName="C:/Program Files/Internet Explorer/IEXPLORE.EXE";  
      String message="www.google.com";  
      String []cmd={exeFullPathName,message};  
      Process proc=Runtime.getRuntime().exec(cmd);  
    } catch (IOException e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    }  
 
  }  
 
} 


package com.iwtxokhtd.other; 
 
import java.io.IOException; 
 
public class ProcessTest { 
 
  public static void main(String[] args) { 
    try { 
       
      String exeFullPathName="C:/Program Files/Internet Explorer/IEXPLORE.EXE"; 
      String message="www.google.com"; 
      String []cmd={exeFullPathName,message}; 
      Process proc=Runtime.getRuntime().exec(cmd); 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
 
  } 
 
} 

 执行上述命令可以打开Google网站

(3)列出系统正在运行的所有进程信息

package com.iwtxokhtd.other;  
 
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
 
public class ListAllProcessTest {  
 
  //列出所有的进程信息  
  public static void main(String[] args) {  
    BufferedReader br=null;  
    try {  
      Process proc=Runtime.getRuntime().exec("tasklist");  
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));  
      @SuppressWarnings("unused")  
      String line=null;  
      System.out.println("打印所有正在运行的进程信息");  
      while((line=br.readLine())!=null){  
        System.out.println(br.readLine());  
      }  
    } catch (IOException e) {  
      e.printStackTrace();  
    }finally{  
      if(br!=null){  
        try {  
          br.close();  
        } catch (Exception e) {  
          e.printStackTrace();  
        }  
      }  
    }  
      
 
  }  
 
} 


package com.iwtxokhtd.other; 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
 
public class ListAllProcessTest { 
 
  //列出所有的进程信息 
  public static void main(String[] args) { 
    BufferedReader br=null; 
    try { 
      Process proc=Runtime.getRuntime().exec("tasklist"); 
      br=new BufferedReader(new InputStreamReader(proc.getInputStream())); 
      @SuppressWarnings("unused") 
      String line=null; 
      System.out.println("打印所有正在运行的进程信息"); 
      while((line=br.readLine())!=null){ 
        System.out.println(br.readLine()); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    }finally{ 
      if(br!=null){ 
        try { 
          br.close(); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        } 
      } 
    } 
     
 
  } 
 
} 

(4)判断一个具体的进程是否正在运行,如下例:

package com.iwtxokhtd.other;  
import java.io.BufferedReader;  
import java.io.InputStreamReader;  
public class FindProcessExeTest  
{  
  public static void main(String []args){  
      
    if(findProcess("QQ.exe")){  
      System.out.println("------判断指定的进程是否在运行------");  
      System.out.println("QQ.exe该进程正在运行!");  
    }else{  
      System.out.println("------判断指定的进程是否在运行------");  
      System.out.println("QQ.exe该进程没有在运行!");  
    }  
 
  }  
  public static boolean findProcess(String processName){  
    BufferedReader br=null;  
    try{  
       
      //下面这句是列出含有processName的进程图像名  
      Process proc=Runtime.getRuntime().exec("tasklist /FI /"IMAGENAME eq "+processName+"/"");  
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));  
      String line=null;  
      while((line=br.readLine())!=null){  
        //判断指定的进程是否在运行  
        if(line.contains(processName)){  
          return true;  
        }  
      }  
        
      return false;  
    }catch(Exception e){  
      e.printStackTrace();  
      return false;  
    }finally{  
      if(br!=null){  
        try{  
          br.close();  
        }catch(Exception ex){  
        }  
      }  
        
    }  
  }  
} 


package com.iwtxokhtd.other; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
public class FindProcessExeTest 
{ 
  public static void main(String []args){ 
     
    if(findProcess("QQ.exe")){ 
      System.out.println("------判断指定的进程是否在运行------"); 
      System.out.println("QQ.exe该进程正在运行!"); 
    }else{ 
      System.out.println("------判断指定的进程是否在运行------"); 
      System.out.println("QQ.exe该进程没有在运行!"); 
    } 
 
  } 
  public static boolean findProcess(String processName){ 
    BufferedReader br=null; 
    try{ 
       
      //下面这句是列出含有processName的进程图像名 
      Process proc=Runtime.getRuntime().exec("tasklist /FI /"IMAGENAME eq "+processName+"/""); 
      br=new BufferedReader(new InputStreamReader(proc.getInputStream())); 
      String line=null; 
      while((line=br.readLine())!=null){ 
        //判断指定的进程是否在运行 
        if(line.contains(processName)){ 
          return true; 
        } 
      } 
       
      return false; 
    }catch(Exception e){ 
      e.printStackTrace(); 
      return false; 
    }finally{ 
      if(br!=null){ 
        try{ 
          br.close(); 
        }catch(Exception ex){ 
        } 
      } 
       
    } 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Java concurrency之锁_动力节点Java学院整理

这篇文章主要为大家详细介绍了Java concurrency之锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java8新特性之StampedLock_动力节点Java学院整理

本文从synchronized、Lock到Java8新增的StampedLock进行对比分析,对Java8新特性之StampedLock相关知识感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Java8新特性之lambda的作用_动力节点Java学院整理

我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析Java集合里面的批量数据操作解开lambda最强作用的神秘面纱。
收藏 0 赞 0 分享

Java8新特性之Base64详解_动力节点Java学院整理

这篇文章主要为大家详细介绍了Java8新特性之Base64的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java8新特性之JavaFX 8_动力节点Java学院整理

这篇文章主要介绍了Java8新特性之JavaFX 8的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

将本地jar包安装进入maven仓库(实现方法)

下面小编就为大家带来一篇将本地jar包安装进入maven仓库(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

下面小编就为大家带来一篇浅谈Java finally语句到底是在return之前还是之后执行(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

基于Java并发容器ConcurrentHashMap#put方法解析

下面小编就为大家带来一篇基于Java并发容器ConcurrentHashMap#put方法解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解Spring Boot Profiles 配置和使用

本篇文章主要介绍了详解Spring Boot Profiles 配置和使用,具有一定的参考价值,有兴趣的可以了解一下
收藏 0 赞 0 分享

详解Spring Boot 属性配置和使用

本篇文章主要介绍了详解Spring Boot 属性配置和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多