Gostaria de armazenar o pid de um comando Java , para poder pará-lo posteriormente.
Esse java roda um servidor, então ele não vai terminar sozinho, impossibilitando uma $!
leitura.
Mas lendo $$
me retorna o pid do script bash, não o do comando Java ...
Meu start.sh
roteiro é este:
#!/bin/bash
echo $$
java --add-exports java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens java.base/java.util=ALL-UNNAMED \
--add-opens java.base/java.nio=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.lang.invoke=ALL-UNNAMED \
-jar target/application-metier-et-gestion.jar
ele exibe: 204630
então inicia o servidor.
Mas um ps aux
me mostra:
lebihan 204630 0.0 0.0 6820 3184 pts/1 S+ 07:31 0:00 /bin/bash ./start.sh
lebihan 204631 90.8 1.6 29503752 1099948 pts/1 Sl+ 07:31 0:46 java --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens j
Como posso obter o 204631
também, para poder armazená-lo e depois matar meu servidor java?
Altere a linha que invoca
java
para que comece comexec java ...
em vez de apenasjava ...
:Isso substituirá o shell em execução pelo processo java, usando o mesmo PID que você já capturou.
Como alternativa, conforme sugerido por cas , execute o
java ...
comando em segundo plano com&
ebash
a$!
variável conterá o PID do processo java:(De
man bash
:!
expande para o ID do processo do trabalho colocado mais recentemente em segundo plano )