Je veux que le script linux tue le programme Java qui tourne sur la console.
Voici le processus en cours d'exécution en tant que jar.
[rapp@s1-dlap0 ~]$ ps -ef |grep Java
rapp 9473 1 0 15:03 pts/1 00:00:15 Java -jar wskInterface-0.0.1-SNAPSHOT-jar-with-dependencies.jar
rapp 10177 8995 0 16:00 pts/1 00:00:00 grep Java
[rapp@s1-dlap0 ~]$
Vous pouvez simplement utiliser pkill -f
comme ceci:
pkill -f 'Java -jar'
EDIT: Pour tuer un processus Java particulier exécutant votre jar spécifique, utilisez cette commande pkill basée sur une expression régulière:
pkill -f 'Java.*lnwskInterface'
Si vous voulez juste tuer tous les processus Java, alors tout ce dont vous avez besoin est;
killall Java
Si, toutefois, vous souhaitez supprimer le processus wskInterface en particulier, la plupart du temps, vous devez simplement supprimer l'id du processus;
PID=`ps -ef | grep wskInterface | awk '{ print $2 }'`
kill -9 $PID
Devrait le faire, il y a probablement un moyen plus facile cependant ...
Utilisez jps pour répertorier les processus Java en cours d’exécution. La commande retourne l'identifiant du processus avec la classe principale. Vous pouvez utiliser la commande kill pour tuer le processus avec l'ID retourné ou utiliser le script suivant à la ligne.
kill $(jps | grep <MainClass> | awk '{print $1}')
MainClass est une classe de votre programme Java en cours d’exécution qui contient la méthode main.
pkill -f pour une raison quelconque ne fonctionne pas pour moi. Quoi qu’il en soit, il semble très difficile de passer en revue ce que ps aux me montre clairement.
Après un après-midi de jure, je suis allée mettre le texte suivant dans mon script de départ:
(ps aux | grep -v -e 'grep ' | grep MainApp | tr -s " " | cut -d " " -f 2 | xargs kill -9 ) || true