Eu sei que há um milhão de perguntas sobre como obter o ID do processo, mas este parece ser único. O Google não me deu a resposta, então espero que o stackexhange ajude ao invés de fechar essa questão.
Quando o Java está envolvido, parece mais complicado encontrar um ID de processo (pgrep não funciona afaik).
Além disso, preciso automatizar isso em um script bash. Um problema que eu encontrei é que quando eu uso ps aux | grep
o processo do grep sempre aparece, então manipular os resultados em um script bash simples não é trivial o suficiente para eu descobrir uma boa solução por conta própria habilidades bash).
Algumas coisas que tentei:
Exemplo 1 - isso retorna um processo, mesmo que não haja aplicativo com esse nome:
$ ps aux | grep -i anythingnotreal
user2 3040 0.0 0.0 4640 856 pts/3 S+ 18:17 0:00 grep --color=auto -i anythingnotreal
Exemplo 2 - isto não retorna nada mesmo que "java_app" esteja atualmente em execução:
$ pgrep java_app
Não retorna nada. No entanto, aqui está a prova de que "java_app" está em execução:
$ ps aux | grep java_app
tester2 2880 0.7 2.8 733196 58444 ? Sl 18:02 0:07 java -jar /opt/java_app2/my_java_app.jar
tester2 3058 0.0 0.0 4644 844 pts/3 S+ 18:19 0:00 grep --color=auto java_app
O que eu preciso é de uma solução que eu possa conectar em um script bash que me dirá se o aplicativo java de interesse (para o qual eu conheço o nome e o caminho do arquivo jar) está atualmente em execução. (Se estiver em execução, preciso pedir ao usuário para fechá-lo antes que meu script continue).