Java程序员的日常 —— 多进程开发
最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理。
这里简单的介绍下:
如何在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);
Java程序员的日常 —— 多进程开发的更多相关文章
- Java程序员的日常 —— 多进程开发IO阻塞问题
本篇仍旧是源于最近的工作,总结一下纪念那些年埋下的坑... 背景故事 需求:"使用进程方式启动另一个程序!" 开发:"OK! Runtime.getRuntime().e ...
- Java程序员的日常——经验贴(纯干货)
工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...
- 2018年,Java程序员转型大数据开发,是不是一个好选择?
近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更加激烈的竞争. 不得 ...
- Java程序员的日常—— Properties文件的读写
在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...
- Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...
- Java程序员的日常—— 垃圾回收中引用类型的作用
在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...
- Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...
- Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统
今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成. SpringMVC+Mybatis Web开发流程 配置数据源 在applicationContext.x ...
- Java程序员的日常——存储过程知识普及
存储过程是保存可以接受或返回用户提供参数的SQL语句集合.在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装.可以在数据库中定义子程序,然后把子程序存储在数据库服务器, ...
随机推荐
- github基本操作
http://www.cnblogs.com/SeeYouBug/p/6193527.html#3583637
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- css让元素居中显示
通常在absolute之后, 想让元素居中,都会采用margin-top:-[元素高度的一半]和 margin-left:-[元素宽度的一半] , 但是当我们的元素宽高不是固定的时候, 这就难办了, ...
- [fortify] 不安全的函数eregi()
PHP 5.4/5.3弃用函数eregi() memory_limit绕过漏洞 [日期:2012-04-02] 来源:Linux社区 作者:Linux [字体:大 中 小] 发布日期:2012- ...
- poj1274(匈牙利算法)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22809 Accepted: 101 ...
- eclipseMARS2.0使用可视化设计界面——配置window builder
1.查看eclipse版本 不同版本的eclipse对应不同的版本window builder,如果不知道版本的话可以通过,点击HELP——>about eclipse来查看自己eclipse的 ...
- LaTex随笔
最近简单接触了LaTex排版,留下一些笔记供日后参考. 1.基本格式 \documentclass{article}\title{……}\begin{document}\maketitle\secti ...
- MongoDB分片之数据分割方式
随着移动互联网的发展,大量的非结构化数据随之产生,不仅对数据库存储大数据提出了新的要求,同时对于查询数据和进行大数据分析也提出了苛刻的要求,这些显然是单服务器处理能力无法满足的,自然建立一个集群是不可 ...
- [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门
一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...
- Linux 2.6 源码学习-内存管理-buddy算法
核心数据结构 linux 2.6 的内存管理支持NUMA(Non Uniform Memory Access Achitecture),即非一致内存访问体系,在该体系中存在多个CPU,并且拥有分离的存 ...