Como executar um programa e obter seu PID em segundo plano

1

Eu tenho um script de inicialização do servidor Minecraft que se parece com isso:

#!/bin/bash
cd "$(dirname "$0")"
exec java -Xmx4096M -Xms4096M -jar minecraft_server.jar

Como obtenho o PID do processo java enquanto consigo inserir entrada no processo Java?

se eu mudar a linha exec para

exec java -Xmx4096M -Xms4096M -jar minecraft_server.jar & echo $! > pid

não me permitirá inserir texto no processo java do servidor Minecraft.

Ivan
fonte
Você já experimentou o processo em segundo plano, pegou o PID e, em seguida, trouxe o processo de volta ao primeiro plano?
Darth Android

Respostas:

5

Quando você inicia o processo java com o exec, seu PID será o mesmo do script de shell. Então você pode fazer

echo $$ > pid
exec java ...
Michael Suelmann
fonte
Você ainda precisa se comunicar com o processo do servidor?
sean_m
Sim, eu preciso para se comunicar com o processo do servidor (eu uso screen -x mc-vanilla -X stuff "say doing something blah blahboaweohv $(printf '\r')"para coisas de entrada em meu servidor minecraft.
Ivan
Por fim, estou pensando em como executar em primeiro plano e exportar PID por muito tempo!
Mark K Cowan
0

execsubstituirá o processo atual; portanto, a execução do bash substitui o bash, é por isso que você perde o shell interativo. Depois de iniciar o minecraft, ps aux | grep minecraft_server.jaro return retornará as informações do processo. Se você precisar retornar apenas a identificação do processo para redirecionar para um arquivo pid ou usar em uma função bash, faça o seguinte:ps aux | grep minecraft_server.jar | awk '{print $2}'

sean_m
fonte
O motivo de eu não querer fazer isso foi porque tenho vários servidores minecraft em execução ao mesmo tempo. Eu queria obter o PID do processo para poder matá-lo e não os outros servidores minecraft.
28413 Ivan Ivan
Peguei vocês. Usamos muitos servidores Tomcat no meu trabalho e usamos o método ps aux, mas usamos grep para analisar o caminho completo do arquivo jar para diferenciar as instâncias do servidor.
sean_m