我希望将一个字符发送到在后台运行的 Java 进程。我发现这篇文章https://serverfault.com/questions/178457/can-i-send-some-text-to-the-stdin-of-an-active-process-running-in-a-screen-sessi? answertab=active#comment155464_178470我认为可以解决问题,但实际上并没有。出于测试目的,我添加了一行
System.out.println("This is what I read "+(int)temp);
以这种方式读取 temp 的位置
int temp = inputStreamReader.read();
确实发生了一些非常奇怪的事情:
- 我在终端窗口中启动进程(这次不在后台)
- 我打开另一个终端并查找进程的 PID
我运行命令
echo q > /proc/*pid_of_the_process/fd/0
在另一个窗口中,这条线出现
q
所以出于某种原因,我在进程正在运行的终端中看到了这个字符,但它实际上并没有被进程读取,因为如果是这种情况,那么我会看到这一行
This is what I read 113
如果我在终端窗口中键入“q”,这就是我实际得到的。
有人知道我为什么会出现这种有趣的行为吗?