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){
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