包含两个java文件,直接运行主进程的java文件就可以了,主进程会自动启动子进程
主进程代码如下:
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* Date: 12-1-13
* Time: 10:52:00
*/
public class Main {
public static BufferedReader inp;
public static BufferedWriter out;
public static void print(String s) {
// logger.info(s);
System.out.println(s);
}
public static String pipe(String msg) {
String ret;
try {
out.write(msg + "\n");
out.flush();
ret = inp.readLine();
return ret;
} catch (Exception err) {
}
return "";
}
public static void main(String[] args) {
String cmd = "\"D:\\Program Files\\Java\\jdk1.6.0_16\\bin\\java\" -Didea.launcher.port=7532 \"-Didea.launcher.bin.path=D:\\Program Files\\JetBrains\\IntelliJ IDEA 10.5\\bin\" -Dfile.encoding=GBK -classpath \"D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\alt-rt.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\charsets.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\deploy.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\javaws.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\jce.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\jsse.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\management-agent.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\plugin.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\resources.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\rt.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\ext\\dnsns.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\ext\\localedata.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\ext\\sunjce_provider.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\ext\\sunmscapi.jar;D:\\Program Files\\Java\\jdk1.6.0_16\\jre\\lib\\ext\\sunpkcs11.jar;E:\\projects\\JProj_Idea\\PipeTest\\out\\production\\PipeTest;D:\\Program Files\\JetBrains\\IntelliJ IDEA 10.5\\lib\\idea_rt.jar\" com.intellij.rt.execution.application.AppMain SubClass";
try {
// print(cmd);
// print(System.getProperty("user.dir"));
Process p = Runtime.getRuntime().exec(cmd);
inp = new BufferedReader(new InputStreamReader(p.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
print(pipe("你好"));
print(pipe("RoteM"));
pipe("quit");
inp.close();
out.close();
} catch (Exception err) {
err.printStackTrace();
}
}
}
子进程代码如下:
import java.io.*;
/**
* Date: 12-1-13
* Time: 10:54:00
*/
public class SubClass {
static BufferedReader bufferedReader;
static BufferedWriter bufferedWriter;
static {
try {
bufferedReader = new BufferedReader(new InputStreamReader(System.in));
File f = new File("e:\\111.txt");
bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "GBK"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static String readFormParentProcess() throws Exception {
String result = bufferedReader.readLine();
return result;
}
public static void main(String[] args) throws Exception {
File f = new File("e:\\111.txt");
String s = readFormParentProcess();
bufferedWriter.write(s);
System.out.println("sub class");
bufferedWriter.flush();
bufferedWriter.close();
bufferedReader.close();
}
}
分享到:
相关推荐
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,通常是父子进程或兄弟进程。管道由两个文件描述符(File Descriptors)组成,一个用于写入(parent to child),另一个用于...
2. **Linux进程通信**:在Linux下,父子进程间的通信主要通过以下方式:共享内存、管道(pipe)、消息队列、信号量、套接字(Socket)等。在这个案例中,子进程使用Socket与父进程进行通信,以检测其状态。 3. **...
它提供了无格式的字节流通道,适用于父子进程间的通信。 5. **缓冲区和数据格式**:在字节流通信中,通常需要使用缓冲区来暂存数据,以提高效率。同时,为了确保数据的正确解析,需要定义特定的数据格式,如JSON、...
它分为无名管道和命名管道,无名管道主要用于父子进程之间的通信,而命名管道则可以连接不相关的进程。 2. **FIFO**:FIFO与管道类似,但它是全双工的,且可以通过文件系统进行访问,任何两个进程只要能访问到同一...
9. **并发和同步**:在多线程或多进程环境中,父进程可能需要等待子进程完成(使用`wait`或`waitpid`函数),或者同步父子进程的行为以确保数据一致性。 10. **性能考虑**:频繁创建和销毁进程可能导致系统资源的...
- 通常用于父子进程之间的简单数据传输。 2. **命名管道(Named Pipe)**: - 克服了普通管道无名的限制,允许无亲缘关系的进程之间进行通信; - 提供了更好的灵活性和扩展性。 此外,还有其他常用的IPC机制,...
- **管道(Pipe)**:允许父子进程之间双向通信。 - **套接字(Socket)**:可以用于不同进程间的通信,即使它们不在同一台机器上。 - **信号量(Semaphore)**:用于同步进程,防止资源竞争。 - **共享内存**:...
- **无名管道**:只存在于父子进程间。 - **有名管道**:可在不同进程间使用,路径形式存在。 - **信号量**: - 用于解决同步问题,如互斥锁、条件变量等。 - **共享内存**: - 允许多个进程共享同一段内存,提高...
父子进程之间会创建 IPC 通道,message 事件和 send() 方法便利用 IPC 通道通信。 句柄传递 学会如何创建子进程后,我们创建一个 HTTP 服务并启动多个进程来共同做到充分利用 CPU 多核。 worker.js ``` var ...