Java Process类的详解及实例代码

时间:2022-08-23 23:32:53

Java Process类的详解

前言:

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

      对Process类的简要说明:

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

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

     其它的概要请参考JDK文档

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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(); 
    
 
  
 
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)使用它的其它构造方法执行相关的命令,如下例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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(); 
    
 
  
 
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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)列出系统正在运行的所有进程信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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(); 
        
      
    
      
 
  
 
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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)判断一个具体的进程是否正在运行,如下例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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){ 
        
      
        
    
  
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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){
        }
      }
       
    }
  }
}

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

原文链接:http://blog.csdn.net/qq_35101189/article/details/58057976