Sur mon serveur local, de nombreux processus Java sont en cours d'exécution et j'utilise simultanément Eclipse. Maintenant, lorsque je dois redémarrer mes processus (je démarre des processus via un script Shell), avant chaque démarrage, je dois supprimer les anciens processus via:
Méthode 1: - kill -9 $Pid
(pour chaque processus, un par un, ce qui prend du temps)
Méthode 2: - killall -9 Java
(pour tous les processus - facile, mais Eclipse sera tué inutilement)
Dans le cas de la méthode 2, Eclipse sera également tué, ce que je ne veux jamais. Y a-t-il un moyen de sortir de ça? Je parie qu'il doit y avoir: P
Edit: J'utilise Ubuntu 15.04.
Essayez cette commande:
ps ax | grep "Java" | egrep -v "Eclipse" | cut -b1-06 | xargs -t kill
cela recherchera tous les processus contenant Java et exécutant Eclipse puis les tuera
Utiliser awk
ps ax | awk '/Java/ && !/Eclipse/ {system("kill "$1)}'
La commande supprime tous les processus Java
, mais pas le processus Eclipse
.
Que diriez-vous :
pgrep -af 'Java' | grep -Po '^[^ ]+(?!.*Eclipse)' | xargs kill
pgrep -af 'Java'
recherche Java
dans la ligne de commande complète des processus et les répertorie.
grep -Po '^[^ ]+(?!.*Eclipse)'
cherche parmi les processus recherchés et obtient les ID de processus des processus pour lesquels Eclipse
n'est pas dans leurs lignes de commande complètes.
xargs kill
va tuer les processus.
jps -m | grep -v Eclipse | awk '{print $1}' | xargs -t kill
Utilisez jps pour vous assurer que vous recherchez uniquement les commandes Java et non pas toutes les commandes dont le chemin est Java.
ps ax | grep "Java" | egrep -v "Eclipse" | cut -b1-06 | xargs -t kill