我有一个 Minecraft 服务器启动脚本,如下所示:
#!/bin/bash
cd "$(dirname "$0")"
exec java -Xmx4096M -Xms4096M -jar minecraft_server.jar
如何在能够向 Java 进程输入输入的同时获取 Java 进程的 PID?
如果我将执行行更改为
exec java -Xmx4096M -Xms4096M -jar minecraft_server.jar & echo $! > pid
它不允许我向 Minecraft 服务器 java 进程输入任何文本。
答案1
当你使用 exec 启动 java 进程时,它的 PID 将与 shell 脚本的 PID 相同。因此你可以这样做
echo $$ > pid
exec java ...
答案2
exec
将替换当前进程,因此从 bash 运行将替换 bash,这就是您失去交互式 shell 的原因。启动 minecraft 后,执行ps aux | grep minecraft_server.jar
将返回进程信息。如果您需要它仅返回进程 id 以重定向到 pid 文件或在 bash 函数中使用,您可以执行以下操作:ps aux | grep minecraft_server.jar | awk '{print $2}'