java父子进程通信

1.利用进程的管道通信传输流

2.子进程没有控制台,正常测试的时候也是没办法看到子进程的输出的,需要传到主线程

3.测试主进程传参给子进程再传回来

4.父进程启动子进程只要执行runtime.exec(cmd)就行了,但在linu下面,需要传入数组命令,否则一些特定字符会被当做参数

5.比如"test.sh >> test.log",这种就不能exec直接执行,传入数组:{"/bin/sh","-c",cmd}

子进程:

import java.io.*;
/**
 * Created by garfield on 2016/11/1.
 */
public class TestCommand {
    public static void main(String[] args) throws IOException, InterruptedException {
        BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
        String line ;
        StringBuffer all = new StringBuffer();
        while((line = s.readLine()) != null){
            all.append(line);
        }
        System.out.println(all);
        s.close();
    }
}

父进程:

import java.io.*;

/**
 * Created by garfield on 2016/11/9.
 */
public class TestCommunication {
    public static void main(String[] args) throws IOException, InterruptedException {
        Runtime run = Runtime.getRuntime();
        String java = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
        String cp = "\"" + System.getProperty("java.class.path");
        cp += File.pathSeparator + ClassLoader.getSystemResource("").getPath() + "\"";
        String cmd = java + " -cp " + cp + " com.TestCommand";
        Process p = run.exec(cmd);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
        bw.write("999999");
        bw.flush();
        bw.close();

        BufferedInputStream in = new BufferedInputStream(p.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String s;
        while ((s = br.readLine()) != null)
            System.out.println(s);
    }
}

父进程将99999传给子进程,又在控制台输出:

999999

 

posted @ 2016-12-09 16:46  但行好事-莫问前程  阅读(3170)  评论(0编辑  收藏  举报