Java程序员的日常 —— 多进程开发
2016-06-07 21:49
495 查看
最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理。
这里简单的介绍下:
如何在Java中执行命令
在windows下肯定是dos命令了,而在linux则为shell命令。执行的方式差不多相同:方法1:Runtime
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 }
方法2:ProcessBuilder
比如上面的命令: 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 }
进程捕获
这里捕获进程的方式,比较投机,是对比进程启动的前后差异:伪代码为:
获取进程列表 启动进程 获取进程列表 对比进程列表,得到最新启动的进程
因此,就需要知道如何获得进程列表:
windows版本获得进程列表
Runtime.getRuntime().exec("cmd /C tasklist");
linux版本获得进程列表
ProcessBuilder builder = new ProcessBuilder("ps","aux"); Process process = builder.start();
停止进程
同上面相似,需要使用对应版本的命令:windows版本停止进程
Runtime.getRuntime().exec("cmd /C taskkill /F /PID " + pid);
linux版本停止进程
Runtime.getRuntime().exec("kill -9 "+pid);
相关文章推荐
- 面试题4:替换字符串中的空格
- 开一篇文章 记录我的java学习路上看过的书和资料 以及杂七杂八的面试经历
- 程序员面试金典(二)
- 汇编程序员之代码风格指南
- 嵌入式软件工程师 面试经验
- [译]好程序员的五声“呐喊”
- 实习面试小记-腾讯、阿里、大摩、网易
- 链表面试题详解
- 如何在面试中发现优秀程序员(转)
- 剑指Offer----面试题29:数组中出现次数超过一半的数字
- 《黑客与画家》读书笔记
- 应届生如何为工作做准备 程序员 技术大牛
- 转载:一个程序员的顿悟
- 面试题的收集
- 程序员的年龄天花板
- 程序员之路──关于代码风格
- 面试过程中涉及的问题
- 标准的JDBC数据库连接代码(面试)
- 女程序员发的一条微博
- 面试中遇到的挫折与打击