Auf meinem lokalen Server werden viele Java-Prozesse ausgeführt, und gleichzeitig verwende ich Eclipse. Wenn ich jetzt meine Prozesse neu starten muss (ich starte Prozesse über ein Shell-Skript), muss ich vor jedem Start die alten Prozesse beenden durch:
Methode 1: -
kill -9 $Pid
(für jeden Prozess einzeln, was zeitaufwändig ist)
Methode 2: -
killall -9 java
(für alle Prozesse - einfach, aber Eclipse wird zu unnötig getötet)
Bei Methode 2 wird auch Eclipse getötet, was ich nie will. Gibt es einen Ausweg? Ich wette, es muss sein: P
Edit: Ich benutze Ubuntu 15.04.
command-line
process
Atiq
quelle
quelle
Antworten:
Probieren Sie diesen Befehl aus:
Dadurch wird nach allen Prozessen gesucht, die Java enthalten, und Eclipse ausgeführt. Anschließend werden sie beendet
quelle
-9
wahllose Verwendung . Sie sollten einem Prozess die Möglichkeit geben, ordnungsgemäß zu beenden.pgrep
ist besser alsps | grep
sonst riskierst du das grep Statement selbst zu töten.pgrep
Sie nicht unterscheiden können, auf welchen Prozessen Eclipse ausgeführt wird, da sogarpgrep -l
nur Berichte erstellt werdenjava
. @ Maythux ist nur als Referenzegrep
veraltet und sollte nicht verwendet werden, dagrep -E
es genau dasselbe tut, obwohl Sie es nicht einmal brauchen,grep -E
da Sie mit einer festen Zeichenfolge übereinstimmen. Also nurgrep -v "eclipse"
(oder wenn Sie Lust haben[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Wenn das ein Perl-Ismus ist, funktioniert es nicht, dapkill
nur EREs unterstützt werden. Ich habe versucht, diese ganze Aufgabe auf einen einzigen Befehl zu reduzieren, der bereitspkill
mit negativen Lookaheads verwendet wird. Aus diesem Grund ist dies fehlgeschlagen.Verwenden
awk
Der Befehl bricht alle
java
Prozesse ab, aber nicht den Prozesseclipse
.quelle
Wie wäre es mit :
pgrep -af 'java'
suchtjava
in der vollständigen Befehlszeile der Prozesse und listet sie aufgrep -Po '^[^ ]+(?!.*eclipse)'
Durchsucht die durchsuchten Prozesse und ruft die Prozess-IDs der Prozesse ab, die nicht übereclipse
die vollständigen Befehlszeilen verfügenxargs kill
wird die Prozesse abbrechen.quelle
pkill
Lösung (nur ein Befehlpgrep/pkill
:) zu haben, wenn Sie Perl-Regexes unterstützen, die Sie im zweiten Schritt oben verwenden. Leiderpgrep
/pkill
nur unterstützt Extended-Regexps (wieegrep/grep -E
).pgrep
/pkill
unterstützt PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Verwenden Sie jps, um sicherzustellen, dass Sie nur nach den Java-Befehlen suchen und nicht nach allen Befehlen, deren Pfad Java enthält.
quelle
quelle