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

本文转自博客园xingoo的博客,原文链接:Java程序员的日常 —— 多进程开发,如需转载请自行联系原博主。

相关文章
|
3天前
|
Java 程序员 Windows
【Java知识点详解 10】为何要配置环境变量,35岁老年程序员的绝地翻身之路
【Java知识点详解 10】为何要配置环境变量,35岁老年程序员的绝地翻身之路
|
3天前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
5天前
|
Java 数据安全/隐私保护 Spring
Java 中 Spring Boot 框架下的 Email 开发
Java 中 Spring Boot 框架下的 Email 开发
199 2
|
2天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
20 3
|
3天前
|
移动开发 搜索推荐 Java
Java如何支持函数式编程?,作为移动开发程序员应该怎样去规划自己的学习路线
Java如何支持函数式编程?,作为移动开发程序员应该怎样去规划自己的学习路线
|
3天前
|
XML 监控 Dubbo
Dubbo03【管理控制台和监控中心搭建】,Java开发实用必备的几款插件
Dubbo03【管理控制台和监控中心搭建】,Java开发实用必备的几款插件
|
3天前
|
消息中间件 JSON Java
十五,java高级程序员面试宝典
十五,java高级程序员面试宝典
|
3天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
3天前
|
IDE Java 程序员
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
|
4天前
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
10 1