本文共 1448 字,大约阅读时间需要 4 分钟。
最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理。
这里简单的介绍下:
在windows下肯定是dos命令了,而在linux则为shell命令。执行的方式差不多相同:
windows版本:Process process = Runtime.getRuntime().exec("ipconfig /all");Linux版本:Process process = Runtime.getRuntime().exec("ifconfig -a");
由此可以见,java程序都是相同的,只是命令不同而已。
获得进程输出信息:
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));String line = null;while ((line = input.readLine()) != null) {//TODO}
获得进程错误信息:
BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));String line = null;while ((line = error.readLine()) != null) {//TODO}
比如上面的命令:ProcessBuilder builder = new ProcessBuilder("ipconfig","/all");Process process = builder.start();
获得输出信息同上面,但是多了一个合并输出和错误的功能:
builder.redirectErrorStream(true);process = builder.start();BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String readLine;while (null != (readLine = br.readLine())) { //TODO }
这里捕获进程的方式,比较投机,是对比进程启动的前后差异:
伪代码为:
获取进程列表启动进程获取进程列表对比进程列表,得到最新启动的进程
因此,就需要知道如何获得进程列表:
Runtime.getRuntime().exec("cmd /C tasklist");
ProcessBuilder builder = new ProcessBuilder("ps","aux");Process process = builder.start();
同上面相似,需要使用对应版本的命令:
Runtime.getRuntime().exec("cmd /C taskkill /F /PID " + pid);
Runtime.getRuntime().exec("kill -9 "+pid);
本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。