我正在尝试在正在运行的 Java 程序和控制台之间实现基于命名 PIPE 的进程间通信。java程序(Test.java)的内容是:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
// starts pipe server
InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
boolean shutdown = false;
while(!shutdown) {
String inputStr = bufReader.readLine();
if(inputStr != null) {
System.out.println("PONG: "+inputStr);
}
Thread.sleep(1000);
}
}
}
程序编译使用:
javac Test.java
创建了命名管道:
mkfifo testing
然后程序作为管道 STDOUT 的消费者运行:
java Test < testing
然后,使用控制台,我向管道 STDIN 发送 ping:
echo PING > testing
由java程序捕获,输出:
PONG: PING
现在出现了一个奇怪的问题:无论何时运行 java 程序,直到将消息发送到 pipe ,使用ps eaux甚至在/proc/中都无法跟踪其进程。
这在 ubuntu(工作计算机)和 rhel(生产服务器)操作系统上重现。有谁知道为什么会这样?
胡说叔叔
冉冉说
相关分类