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 .jar
s 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
?
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
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.
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