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
java启动子进程以及进程通信的更多相关文章
- java父子进程通信
1.利用进程的管道通信传输流 2.子进程没有控制台,正常测试的时候也是没办法看到子进程的输出的,需要传到主线程 3.测试主进程传参给子进程再传回来 4.父进程启动子进程只要执行runtime.exec ...
- 【原创】java中的父进程子进程 —— 坑爹的java Runtime.getRuntime().exec
最近有一个需求,需要用一个java进程启动多个子进程来完成并发任务.由于必须给用户完成任务的反馈,所以需要父进程记录子进程的生命周期. exec方法返回一个Process对象,在当前进程内调用该对象的 ...
- JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令
通过 java.lang.Runtime 类可以方便的调用操作系统命令,或者一个可执行程序,下面的小例子我在windows和linux分别测试过,都通过.基本原理是,首先通过 Runtime.getR ...
- Java进程通信之映像文件共享内存
Java进程通信之映像文件共享内存 1. 共享内存 vs 进程通信 对UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种.但windows实际上只有影像文件共享内存一种. 而说到进程通信 ...
- Linux间的进程通信;以及子进程的创建
"-----第六天-----------------------------------------------------------------------------" .版 ...
- java多线程上篇(三) -- 进程通信和线程死锁简单介绍
进程通信指的是进程间的信息交换 ,IPC(Inter-Process Communication,进程间通信) 进程通信就相当于一种工作方式.沟通形式,进程通信主要指的就是操作系统提供的进程通信工具( ...
- Qt启动子进程,子进程关闭时通知主进程,实现主进程对子进程的管理
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.需求描述 Qt主进程启动 ...
- Java 输入/输出——Java虚拟机读写其它进程的数据
使用 Runtime对象的exec()方法可以运行平台上的其它程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程.Process类提供了如下三个方法,用于让程序 ...
- [转]WINDOW进程通信的几种方式
windows进程通信的几种方式 1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/O操作,只需简单的指针 ...
随机推荐
- CF Round #353 Div.2
http://codeforces.com/contest/675 A. Infinite Sequence 题意:给出等差数列的首项a以及公差c,问数b是不是该数列中的数,若是输出YES否则输出NO ...
- mac生成ssh keys
打开终端 输入ssh-keygen,然后系统提示输入文件保存位置等信息,连续敲三次回车即可,生成的SSH key文件保存在中-/.ssh/id_rsa.pub
- [SOJ] shortest path in unweighted graph
Description 输入一个无向图,指定一个顶点s开始bfs遍历,求出s到图中每个点的最短距离. 如果不存在s到t的路径,则记s到t的距离为-1. Input 输入的第一行包含两个整数n和m, ...
- Elasticsearch常用插件(三)
elasticsearch-head 一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es. 项目地址:https://github.co ...
- C#中string的小结
C#中的string类型明确定义为引用类型,但是使用时常常表现出数值型的特性.最典型的例子就是交换字符串. public static void stringexchange(string a, st ...
- Python基础(六)-内置函数
map().filter().reduce() map(func,iterator) --> filter(func,iterator) --> reduce(func,iterato ...
- Java中的注释
代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率.也是程序代码可维护性的重要环节之一.所以我们不是为写注释而写注释.下面说一下Javadoc注释规范以及楼主在J2EE ...
- java 基础知识2
- iOS 如何随意的穿插跳跃,push来pop去
OS 如何随意的穿插跳跃,push来pop去 主题思想:如A.B.C.D 四个视图控制器 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A ...
- C# 手机格式验证
C# 手机格式验证 //电信手机号码正则 Regex dReg = new Regex(@"^1[3578][01379]\d{8}$"); //联通手机号正则 Regex tRe ...