获取特定 PID 并保存到文件

获取特定 PID 并保存到文件

我在我的机器上运行着两个 minecraft 服务器。我想知道正在运行的单个 mc 服务器的 PID 是什么,并将其保存到文件中,以便稍后可以将其终止。因此,对于这个例子,我只想知道 World2 的 PID 是什么,不想知道其他的,并将其保存到文件中。

当我执行命令时

ps h -o pid,cmd -u minecraft 

我得到以下结果

31416 /usr/lib/jvm/java-8-oracle/jre/bin/java -Xmx2G -Xms1G -jar /data/mc-server/World1/minecraft_server.jar nogui
31706 /usr/lib/jvm/java-8-oracle/jre/bin/java -Xmx6G -Xms4G -jar /data/mc-server/World2/craftbukkit.jar nogui

然后我使用此命令通过管道传输到 grep

grep World2

这是我遇到困难的地方,然后我通过管道获取单个结果。我尝试了以下方法,但就是无法得到它。

awk '{print $1 > world2.pid}'

所以我的完整命令是:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1 > world2.pid}'

我收到以下错误:

awk: cmd. line:1: {print $1 > world2.pid}
awk: cmd. line:1:                 ^ syntax error

答案1

如果你想把重定向里面awk,您需要将文件名放在引号中 - 否则,awk 会将其视为变量而不是文字字符串:

... | awk '{print $1 > "world2.pid"}'

然而,更常规的做法是让 awk 写入标准输出,然后重定向IE

... | awk '{print $1}' > world2.pid

或者,你可能想看看使用pgrep整个任务,例如

pgrep -f 'World2' > world2.pid

答案2

如果你把> world2.pid后面的东西放上去awk '{print $1}',它应该可以工作:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1}' > world2.pid

然后输出:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1}'

写给:

world2.pid

或者

根据@JonathanLeffler的建议(感谢),您可以保存以下用法grep

ps h -o pid,cmd -u minecraft | awk '/World2/ {print $1}' > world2.pid

相关内容