Eu tenho um .jar
arquivo que é notório por mau funcionamento. Quando ocorre um mau funcionamento, apenas uma reinicialização ajuda. Eu tenho uma maneira de detectar esse mau funcionamento (lendo o arquivo de log do dito .jar
). Então, eu quero escrever um script, que encerre o processo sempre que ocorrer o mau funcionamento. O problema é:
confus@confusion:~$ ps -A
...
4438 ? 00:00:00 java
4439 ? 00:00:00 java
4443 ? 00:00:00 java
...
O nome do processo de todos os .jar
s em execução é naturalmente "java". Como descubro qual desses processos "java" é o que eu quero matar, ou seja, o que está sendo executado foobar.jar
?
Respostas:
Você pode executar o
lsof
comando, que lista quais processos possuem arquivos abertos, com seu arquivo jar fornecido como argumento. Um exemplo de exibição de um arquivo com menos:Para reutilizar facilmente o pid em um script, você pode executá-lo no modo conciso:
fonte
Usar
ps ax
ajudará.Ele exibirá a árvore de processos em um estilo BSD que simplesmente mostra muito mais informações.
Para encontrar seu processo específico, você apenas precisa grep para o nome JAR.
ps ax | grep JARNAME
vai fazer isso.fonte
Você pode fazer isso nativo ou se "lsof" não estiver instalado via / proc // fd Exemplo:
fonte
Você pode usar
jps
com as-l
opções que retornarão o arquivo .jar usado com o caminho completo.fonte