Quando você inicia o processo java com exec, seu PID será o mesmo que o do shell script. Então você pode fazer
echo $$ > pid
exec java ...
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 posso inserir entrada no processo Java?
se eu mudar a linha exec para
exec java -Xmx4096M -Xms4096M -jar minecraft_server.jar & echo $! > pid
ele não me deixa inserir nenhum texto no processo java do servidor Minecraft.
exec
irá substituir o processo atual, então a execução do bash substitui o bash, e é por isso que você perde o shell interativo. Depois de iniciar o minecraft, fazer ps aux | grep minecraft_server.jar
retornará as informações do processo. Se você precisar dele para retornar apenas o id do processo para redirecionar para um arquivo pid ou usar em uma função bash você pode fazer isso: ps aux | grep minecraft_server.jar | awk '{print $2}'