小编Joe*_*oth的帖子

通过 /proc/{pid}/fd/0 使用 stdin 向 java -jar 发送命令

我正在尝试使用 /proc/{pid}/fd/0 向 minecraft 服务器 jar 发送命令,但服务器不执行该命令。

要复制我正在尝试做的事情,您可以在基于 Debian 的机器(也可能是其他 Linux 发行版)上执行此操作。

我用什么来测试这个:

  • Ubuntu 14.04
  • minecraft_server.jar(使用 1.8 测试)
  • OpenJDK 运行时环境(使用 default-jre-headless 安装)

第一个控制台:

$ java -jar minecraft_server.jar nogui
Run Code Online (Sandbox Code Playgroud)

响应:[ ...服务器启动并等待输入]

say hi
Run Code Online (Sandbox Code Playgroud)

响应:[19:52:23] [服务器线程/信息]:[服务器] 嗨

第二个控制台:

现在,当我切换到第二个控制台时,服务器仍在第一个控制台中运行,我写道:

echo "say hi2" >> /proc/$(pidof java)/fd/0
Run Code Online (Sandbox Code Playgroud)

一切看起来都很好,直到我切换回第一个控制台。我可以看到文本“say hi2”,但服务器没有识别它。我可以再次在第一个控制台中编写另一个命令,就好像从第二个控制台输入的文本甚至不存在一样。

为什么是这样?更重要的是,如何以正确的方式使用 /proc/{pid}/fd/0 将命令发送到 java jar 文件?

我不知道这是否是某种我不知道的 Java 东西,是否可以在执行服务器时使用某些标志或其他东西,或者是否是服务器 jar 本身的问题。

我知道您可以使用 screen、tail -f 或某种服务器包装器来完成此操作,但这不是我想要的。我想以某种方式使用这种方法发送命令。

java linux bash stdin minecraft

5
推荐指数
1
解决办法
3176
查看次数

标签 统计

bash ×1

java ×1

linux ×1

minecraft ×1

stdin ×1