如何在后台运行程序并获取其 PID

如何在后台运行程序并获取其 PID

我有一个 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}'

相关内容