• 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);
    
  • 相关阅读:
    谁来催生国产中高档数控系统市场
    对于HBase的MapReduce性能提升方案之BulkLoad
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    遇见程序猿男朋友
    理解class.forName()
    正则表达式
    java实现第七届蓝桥杯棋子换位
    java实现第七届蓝桥杯机器人塔
    java实现第七届蓝桥杯机器人塔
    java实现第七届蓝桥杯凑平方数
  • 原文地址:https://www.cnblogs.com/xing901022/p/5568419.html
Copyright © 2020-2023  润新知