web-dev-qa-db-fra.com

Comment tuer tous les processus sauf un spécifique

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.

13
Atiq

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

17
Maythux

Utiliser awk

ps ax | awk '/Java/ && !/Eclipse/ {system("kill "$1)}'

La commande supprime tous les processus Java, mais pas le processus Eclipse.

12
A.B.

Que diriez-vous :

pgrep -af 'Java' | grep -Po '^[^ ]+(?!.*Eclipse)' | xargs kill
  • pgrep -af 'Java' recherche Javadans 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 Eclipsen'est pas dans leurs lignes de commande complètes.

  • xargs kill va tuer les processus.

1
heemayl

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.

0
Chetan Narsude
ps ax | grep "Java" | egrep -v "Eclipse" | cut -b1-06 | xargs -t kill
0
Ankur Kumar