J'exécute généralement quelques applications Java, une pour le serveur fonctionnant localement et une autre pour certains IDE comme NetBeans. Et de temps en temps, après de nombreux redéploiements, mon serveur est bloqué sur OutOfMemoryException, j'ai donc besoin de tuer le processus Java pour redémarrer.
Donc je le fais, pkill -9 java
mais cela tue également mon IDE en cours d'exécution, ce que je ne veux pas. Alors, comment puis-je tuer uniquement les applications liées au serveur en cours d'exécution et non les autres? Je suppose qu'elles s'exécutent toutes sous le même processus, mais il doit y avoir un moyen de les distinguer.
top
oups
) et choisissez la bonne et tuez-la par PID (kill -9 PID_number).PID
. Merci beaucoupRéponses:
Pour tuer un processus associé à plusieurs processus, vous devez le supprimer en utilisant l'ID de processus associé à ce processus.
Pour obtenir l'ID de processus de ce processus java, exécutez
la sortie de cette commande donnera la liste des processus java exécutés sur votre système. Notez l'ID de processus (PID) de ce processus que vous souhaitez tuer et exécuter
la source
ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
OMI, la meilleure solution est:
la source
ps -fC java
de trouvernameOfYourJavaAplication
(en-Dprogram.name
)Au lieu d'utiliser
ps
etgrep
, vous pouvez utiliserps
l'-C
indicateur 's pour sélectionner toutes les commandes répertoriées avec le nom' java '. Vous pouvez également utiliserps
l'-f
indicateur de pour imprimer le nom de commande complet de chaque processus répertorié. De cette façon, vous pouvez voir ce que fait réellement chaque processus java. Voici la commande en entier:ps -fC java
.Vous pouvez également utiliser
pgrep
pour répertorier tous les processus java.pgrep -a java
renverra le PID et la ligne de commande complète de chaque processus java.Une fois que vous avez le PID de la commande que vous souhaitez tuer, utilisez-le
kill
avec le-9
drapeau (SIGKILL) et le PID du processus java que vous souhaitez tuer. Java ne s'arrête pas toujours lorsqu'il reçoit un signal 'SIGTERM' (les processus sont autorisés à gérer 'SIGTERM'), donc lui envoyer le signal 'SIGKILL', qui fait que init tue le programme sans l'avertir au préalable, est souvent nécessaire.Par exemple, si
ps -fC java
renvoieou
psgrep -a java
retourneet tu veux tuer
java TestProgram
, tu devrais courirkill -9 11775
.la source
Si vous voulez qu'un script trouve et tue votre programme en cours d'exécution (spécifique) en utilisant un modèle de la ligne de commande du programme (et pas seulement chaque chose java que vous avez exécutée), alors:
Depuis /unix//a/31111/249209
la source
jps
etjcmd
sont des outils spécialisés pour afficher uniquement les informations sur les processus Java et les PID.Vous pouvez explorer leurs options pour une sortie plus détaillée.
la source
Voici un script que l'on peut utiliser pour automatiser le processus.
Remplacez la
<PROCESS_NAME>
pièce par ce que java exécute.Remarque: je n'ai pas mis le
-9
. Je ne devrais pas être requis, sauf si vous capturez des signaux etSIGTERM
(par défaut) échoue. Je vous suggère également d'utiliser le nom du signal, ce qui facilite la lecture:AVERTISSEMENT
Avant d'exécuter,
kill ...
assurez-vous que la$process
variable est définie comme prévu. Leps -ef
peut être différent entre Unices, ilawk
peut donc être nécessaire d'imprimer un paramètre différent.Remarque
Le
<PROCESS_NAME>
pourrait être changé en variable. N'oubliez pas que si vous devez le taper sur votre ligne de commande à chaque fois, vous risquez de faire des erreurs de temps en temps. Je trouve plus facile d'avoir plusieurs copies du script avec le nom correct.Aussi important: notez les guillemets simples pour le
awk
script. Cela signifie que vous devez fermer et rouvrir la chaîne avec la variable entre les deux. Quelque chose comme ça devrait fonctionner (non testé):la source