Na moim serwerze lokalnym działa wiele procesów Java, a jednocześnie korzystam z Eclipse. Teraz, kiedy muszę zrestartować swoje procesy (uruchamiam procesy za pomocą skryptu powłoki), przed każdym uruchomieniem muszę zabić stare procesy poprzez:
Metoda 1: -
kill -9 $Pid
(dla każdego procesu jeden po drugim, co jest czasochłonne)
Metoda 2: -
killall -9 java
(dla wszystkich procesów - łatwa, ale Eclipse zostanie zabita zbyt niepotrzebnie)
W przypadku metody 2 Eclipse również zostanie zabity, czego nigdy nie chcę. Czy jest na to wyjście? Założę się, że musi być: P
Edycja: Używam Ubuntu 15.04.
command-line
process
Atiq
źródło
źródło
Odpowiedzi:
Spróbuj tego polecenia:
to przeszuka wszystkie procesy zawierające java i wykonujące zaćmienie, a następnie je zabije
źródło
-9
bezkrytycznie. Powinieneś kiedykolwiek dać procesowi szansę na wdzięczne wyjście.pgrep
jest lepszy niżps | grep
w przeciwnym razie ryzykujesz zabicie samego polecenia grep.pgrep
że nie jesteś w stanie odróżnić, które procesy wykonują zaćmienie, ponieważ nawetpgrep -l
po prostu zgłosijava
. @ Maythux, tylko dla odniesienia,egrep
jest przestarzały i nie powinien być używany, ponieważgrep -E
robi dokładnie to samo, chociaż nawet nie potrzebujesz,grep -E
ponieważ dopasowujesz stały ciąg; więc po prostugrep -v "eclipse"
(lub jeśli chcesz być fantazyjny[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Jeśli jest to perlizm, to nie zadziała, ponieważpkill
obsługuje tylko ERE, próbowałem zredukować to całe zadanie do pojedynczego polecenia, które jest już używanepkill
z negatywnymi prognozami i z tego powodu nie powiodło się.Za pomocą
awk
Polecenie zabija wszystkie
java
procesy, ale nie proceseclipse
.źródło
Co powiesz na :
pgrep -af 'java'
wyszukujejava
w pełnym wierszu poleceń procesów i wyświetla jegrep -Po '^[^ ]+(?!.*eclipse)'
przegląda wyszukiwane procesy i uzyskuje identyfikatory procesów, których nie maeclipse
w pełnych wierszach poleceńxargs kill
zabije procesy.źródło
pkill
rozwiązanie, jeślipgrep/pkill
obsługiwane wyrażenia regularne perla, których używasz w drugim kroku powyżej. Niestetypgrep
/pkill
obsługuje tylko rozszerzone wyrażenia regularne (jakegrep/grep -E
).pgrep
/pkill
wspiera PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Użyj jps, aby upewnić się, że szukasz tylko poleceń Java, a nie wszystkich poleceń, które mają Java na swojej ścieżce.
źródło
źródło