Como posso descobrir quais arquivos jar estão sendo executados atualmente (e seus PIDs)?

11

Eu tenho um arquivo .jar que é notório por mau funcionamento. Quando ocorre uma avaria, apenas um reinício ajuda. Eu tenho uma maneira de detectar esse mau funcionamento (lendo o arquivo de log do referido .jar ) Então, eu quero escrever um script, que mata o processo sempre que o mau funcionamento ocorre. 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 todo o .jar s em execução é naturalmente "java". Como faço para descobrir quais desses processos "java" é o que eu quero matar, ou seja, aquele que está executando foobar.jar ?

    
por con-f-use 20.05.2011 / 10:54

2 respostas

8

Você pode executar o comando lsof , que lista quais processos têm arquivos abertos, com seu arquivo jar fornecido como argumento. Um exemplo de visualização de um arquivo com menos:

egil@mutter:~$ lsof foo.c
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
less    18871 egil    4r   REG    8,2        0 53862540 foo.c
egil@mutter:~$

Para reutilizar facilmente o pid em um script, você pode executá-lo no modo conciso:

egil@mutter:~$ lsof -t foo.c
18871
    
por Egil 20.05.2011 / 11:06
6

Usar ps ax ajudará.

Ele irá mostrar a árvore de processos em um estilo BSD que simplesmente mostra mais informações.

Para encontrar o seu processo em particular, você só precisa fazer o grep para o nome do JAR. ps ax | grep JARNAME fará isso.

    
por Octavian Damiean 20.05.2011 / 11:06