java
用了这么久,貌似没有使用过多进程。貌似一般的需求里面也不涉及这个方面。
但是,有时候确实有这种奇怪的需求,比如xxx.
于是,通过翻阅api
文档,以及参考往上博客,写了一个简单的多进程程序。
package com.pythoncat.java.process;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
/**
* Created on 2017/8/11.
* from http://www.jianshu.com/p/428bbc3852a7
* @author cat
*/
public class NewlyProcess {
public static void main(String[] args) throws IOException, InterruptedException {
createProcess("java", "-version");
// CmdToolkit.readConsole("java",true);
createProcess("git","status");
}
private static void createProcess(String... cmd) throws IOException, InterruptedException {
// ProcessBuilder pb = new ProcessBuilder("java", "-version");
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
process.waitFor();
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
StringBuilder sb = new StringBuilder();
sb.append("---------------------------------\n");
sb.append("commands:\t")
.append(Arrays.toString(cmd))
.append("\n");
// System.out.println(sb);
sb.append("RESULT:\t").append("\n");
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
sb.append("---------------------------------\n");
System.out.println(sb.toString());
}
}
代码量很少,主要的代码还是用于打印输出了。输出结果如下:
---------------------------------
commands: [java, -version]
RESULT:
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
---------------------------------
---------------------------------
commands: [git, status]
RESULT:
fatal: Not a git repository (or any of the parent directories): .git
---------------------------------
其中关键逻辑至于3行
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
process.waitFor();