Come posso sapere quali file Jar Jar è attualmente in esecuzione (e i loro PID)?


12

Ho un .jarfile che è noto per malfunzionamenti. Quando si verifica un malfunzionamento, solo un riavvio aiuta. Ho un modo per rilevare quei malfunzionamenti (leggendo il file di registro di detto .jar) Quindi voglio scrivere uno script, che uccide il processo ogni volta che si verifica un malfunzionamento. Il problema è:

confus@confusion:~$ ps -A
...
4438 ?        00:00:00 java
4439 ?        00:00:00 java
4443 ?        00:00:00 java
...

Il nome del processo di tutte le .jars in esecuzione è naturalmente "java". Come faccio a sapere quale di questi processi "java" è quello che voglio uccidere, cioè quello in esecuzione foobar.jar?


Si noti che se si esegue lo stesso utente, è possibile collegarlo utilizzando ad esempio visualvm e controllarlo prima di ucciderlo.
Thorbjørn Ravn Andersen,

Risposte:


11

È possibile eseguire il lsofcomando, che elenca quali processi ha file aperti, con il file jar fornito come argomento. Un esempio di visualizzazione di un file con meno:

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:~$

Per riutilizzare facilmente il pid in uno script, è possibile eseguirlo in modalità concisa:

egil@mutter:~$ lsof -t foo.c
18871

Questa risposta è ancora migliore. +1.
Ottaviano A. Damiano,

7

Utilizzando ps axaiuterà.

Visualizzerà l'albero di processo in uno stile BSD che mostra semplicemente molte più informazioni.

Per trovare il tuo particolare processo devi solo richiedere il nome JAR. ps ax | grep JARNAMElo farà.


1

Puoi fare questo nativo o se "lsof" non è installato tramite / proc // fd Esempio:

ps -ef|grep -w java
...
0c4       6917  6916  0 12:22 pts/7    00:00:00 java
...

ls -la /proc/6917/fd/
total 0
dr-x------ 2 0c4 svauser  0 Apr  2 12:23 .
dr-xr-xr-x 9 0c4 svauser  0 Apr  2 12:22 ..
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 0 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 1 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 2 -> /dev/pts/7
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 3 -> /opt/jdk1.8.0_191/jre/lib/rt.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 4 -> /media/veracrypt1/Downloads/rr/testone.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 5 -> /usr/share/java/gnu-getopt-1.0.14.jar

0

È possibile utilizzare jpscon le -lopzioni che restituiranno il file .jar utilizzato con il percorso completo.

-l Visualizza il nome pacchetto completo per la classe principale dell'applicazione o il nome percorso completo del file JAR dell'applicazione.


jps non era presente nei runtime Java disponibili quando è stata posta la domanda. È disponibile in quelli disponibili oggi.
Thorbjørn Ravn Andersen,

Posso vederlo sui documenti Java SE 6: docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html , e questo è da dicembre 2006 come posso vedere qui: en.wikipedia.org/ wiki / Java_version_history # Java_SE_7
froblesmartin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.