11
votes

Script Shell pour arrêter un programme Java

Y a-t-il un moyen d'arrêter un programme Java en cours d'exécution à l'aide d'un script shell en connaissant le nom seul.Je utilisez KSH Shell


4 commentaires

Savoir quel nom? Si vous connaissez le nom de l'exécutable (qui est normalement java si), killall est votre ami.


@sfussenegger: Il ne veut probablement pas tuer tous les processus Java, mais un seul spécifique.


@MNEYH C'est ce que j'attendais aussi, mais de l'information donnée, c'est la meilleure chose à laquelle je puisse recommander.


Vous voudrez peut-être aussi consulter le démarrage-stop-démon si le processus que vous essayez de tuer est destiné à courir comme un démon


5 Réponses :


1
votes

Vous pouvez utiliser pkill: xxx

Cela fonctionnerait si vous exécutez qu'une seule instance de votre programme est en cours d'exécution.


0 commentaires

3
votes

Vous pouvez utiliser JPS identifiant l'ID de processus associé au nom du programme Java Démaral (JPS est un gestionnaire de processus pour Java-Programmes). Avec cet identifiant, vous pouvez tuer le processus normalement.


2 commentaires

En supposant que mon nom de fichier Java est test.java et exécute comment le trouver?


@Harish: Après la compilation et l'exécution, il sera affiché comme «test». Si vous l'emballez dans un jar exécutable (test.jar) et exécutez via 'Java -Jar Test.jar' JPS montre 'test.jar'.



6
votes

Ajoutez une propriété unique à la JVM pour l'identifier facilement, par ex. Pour test.class xxx

pour le tuer: xxx


2 commentaires

Ça marche bien sous Ksh. Vous avez peut-être fait une erreur de copier la commande.


'grep [u] niquename' est une alternative à 'Grep Uniquename | grep -v grep '



20
votes

Suivi sur MNEMENTH 'Suggestion :

Ceci devrait faire le travail xxx

  • JPS -L : Liste Java Process avec "Nom complet du package pour la classe principale de l'application ou le nom complet du chemin correspond au fichier JAR de l'application."

  • grep : choisissez le processus que vous aimez

  • Cut -D - '' -F 1 : Sélectionnez la sortie dans les colonnes à l'aide de Delimiter '' et imprimez uniquement le premier (PID)

  • xargs -rn1 kill : exécuter tuer pour chaque PID (le cas échéant)

    Notez que vous devez exécuter JPS et Xargs avec le même utilisateur (ou racine) que vous exécutez le processus


2 commentaires

Cela fonctionnera également pour les machines Windows, mais vous devrez faire une certaine détection de l'environnement pour déterminer quel tuer à utiliser.


@Odelya je viens d'ajouter -r ( - no-rude-if-vide ) sur xargs pour éviter cette erreur.



1
votes

Vous pouvez utiliser -o option de PS pour formater votre sortie,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'


0 commentaires