web-dev-qa-db-fra.com

Comment savoir quels fichiers JAR Java sont en cours d'exécution (et leurs PID)?

J'ai un fichier .jar qui est notoire pour les dysfonctionnements. Lorsqu'un dysfonctionnement survient, seul un redémarrage est utile. J'ai un moyen de détecter ces dysfonctionnements (en lisant le fichier journal dudit .jar) Je veux donc écrire un script qui tue le processus à chaque fois que le dysfonctionnement se produit. Le problème est:

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

Le nom du processus de tous les .jars en cours d’exécution est naturellement "Java". Comment puis-je savoir lequel de ces processus "Java" correspond à celui que je veux tuer, c’est-à-dire celui qui exécute foobar.jar?

11
con-f-use

Vous pouvez exécuter la commande lsof, qui répertorie les processus qui ont des fichiers ouverts, votre fichier jar étant donné comme argument. Un exemple affichant un fichier avec moins:

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

Pour réutiliser facilement le pid dans un script, vous pouvez l'exécuter en mode abrégé:

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

Utiliser ps ax vous aidera.

Il affichera l’arbre de processus dans un style BSD, qui montre simplement beaucoup plus d’informations.

Pour trouver votre processus particulier, il vous suffit de rechercher le nom du fichier JAR. ps ax | grep JARNAME le fera.

6
Octavian Damiean

Vous pouvez le faire en natif ou si "lsof" n’est pas installé via/proc // fd Exemple:

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
0x0C4