Java 在向管道标准输入某些内容之前,以管道标准输出为输入的运行进程是不可跟踪的

Java 在向管道标准输入某些内容之前,以管道标准输出为输入的运行进程是不可跟踪的,java,linux,bash,pipe,Java,Linux,Bash,Pipe,我试图在运行的java程序和控制台之间实现基于命名管道的进程间通信。java程序(Test.java)的内容包括: 程序是使用以下方法编译的: javac Test.java 已创建命名管道: mkfifo testing 然后,程序作为管道标准输出的使用者运行: java Test < testing 由java程序捕获,输出: PONG: PING 现在是一个奇怪的问题:每当运行java程序时,直到消息被发送到管道,其进程都无法使用ps eaux甚至在/proc/中进行跟踪 这

我试图在运行的java程序和控制台之间实现基于命名管道的进程间通信。java程序(Test.java)的内容包括:

程序是使用以下方法编译的:

javac Test.java
已创建命名管道:

mkfifo testing
然后,程序作为管道标准输出的使用者运行:

java Test < testing
由java程序捕获,输出:

PONG: PING
现在是一个奇怪的问题:每当运行java程序时,直到消息被发送到管道,其进程都无法使用ps eaux甚至在/proc/中进行跟踪


这可以在ubuntu(工作计算机)和rhel(生产服务器)操作系统上复制。有人知道为什么会发生这种情况吗?

这与java程序无关,但与启动它的shell以及命名管道的行为有关


在类似
program的命令中演示它与Java无关

下面是在Shell中实现的相同代码:

shutdown=1
而[$shutdown-ne 0];做
read-r inputStr
如果[-n“$inputStr”];然后
echo“PONG:${inputStr}”
fi
睡眠1.000秒
完成
sh Test.sh
echo PING > testing
PONG: PING
mkfifo testing
java Test 0<>testing
sh Test.sh < testing