Sur mon serveur local, de nombreux processus java sont en cours d'exécution et j'utilise en même temps Eclipse. Maintenant, lorsque je dois redémarrer mes processus (je démarre les processus via un script shell), avant chaque démarrage, je dois tuer 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é trop 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 s'en sortir? Je parie qu'il doit y avoir: P
Edit: j'utilise ubuntu 15.04.
command-line
process
Atiq
la source
la source
Réponses:
Essayez cette commande:
cela va rechercher tous les processus contenant java et éclipse exclu puis les tuer
la source
-9
sans discernement. Vous devez toujours donner à un processus la possibilité de se terminer avec élégance.pgrep
est mieux queps | grep
sinon vous risquez de tuer la déclaration grep elle-même.pgrep
vous n'êtes pas en mesure de distinguer les processus qui exécutent eclipse, car mêmepgrep -l
ne fera que signalerjava
. @ Maythux, juste pour référence,egrep
est obsolète et ne devrait pas être utilisé, car ilgrep -E
fait exactement la même chose, bien que vous n'en ayez même pas besoingrep -E
car vous faites correspondre une chaîne fixe; si justegrep -v "eclipse"
(ou si vous voulez être chic[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Si c'est un Perl-ism, cela ne fonctionnera pas, car ilpkill
ne prend en charge que les ERE, j'ai essayé de réduire toute cette tâche à une seule commande déjà utiliséepkill
avec des références négatives et qui a échoué pour cette raison.En utilisant
awk
La commande tue tous les
java
processus, mais pas le processuseclipse
.la source
Que diriez-vous :
pgrep -af 'java'
recherchejava
dans la ligne de commande complète des processus et les répertoriegrep -Po '^[^ ]+(?!.*eclipse)'
regarde parmi les processus recherchés et obtient les ID de processus des processus qui n'ont paseclipse
dans leurs lignes de commande complètesxargs kill
va tuer les processus.la source
pkill
si ellepgrep/pkill
supportait les regex de perl que vous utilisez dans la 2ème étape ci-dessus. Malheureusementpgrep
/pkill
ne supporte que les regexps étendues (commeegrep/grep -E
).pgrep
/pkill
supporte PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Utilisez jps pour vous assurer que vous recherchez uniquement les commandes java et pas toutes les commandes qui ont java sur leur chemin.
la source
la source