Używam tomcata, a czasami kiedy mówię mu, żeby przestał, nie zabija właściwie procesu.
Mój sposób na obejście tego też jest:
lsof -i tcp:8080
które wyjścia:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 888 root 35u IPv6 780659 0t0 TCP *:http-alt (LISTEN)
java 888 root 39r IPv6 790103 0t0 TCP localhost:58916->localhost:http-alt (CLOSE_WAIT)
java 888 root 40r IPv6 792585 0t0 TCP localhost:58936->localhost:http-alt (CLOSE_WAIT)
java 888 root 75r IPv6 785553 0t0 TCP localhost:58701->localhost:http-alt (CLOSE_WAIT)
java 888 root 77r IPv6 787642 0t0 TCP localhost:58814->localhost:http-alt (CLOSE_WAIT)
java 888 root 130u IPv6 783894 0t0 TCP localhost:58686->localhost:http-alt (CLOSE_WAIT)
java 888 root 353u IPv6 780929 0t0 TCP localhost:58632->localhost:http-alt (CLOSE_WAIT)
Następnie biegnę
kill -9 pid
Chcę znaleźć wszystkie numery pid i je zabić. Chodzi o to, że nie wiem jak odizolować to pole.
tomcat
otwarty tylko jeden proces, możesz użyćkillall -9 tomcat
Odpowiedzi:
Istnieje
-t
opcja (zwięzła)lsof
, która wydaje się robić dokładnie to, czego szukasz, tjWidzieć
man lsof
Zakładając, że masz niezbędne uprawnienia, możesz przekazać wynik
kill
jako listę PID z podstawieniem polecenia:źródło
Nie zapomnij o
--no-run-if-empty
opcji zabicia :)W ten sposób zabójstwo zostanie uruchomione tylko wtedy, gdy proces nasłuchuje, a nie trzeba samemu sprawdzać.
źródło
lsof -i tcp:8080
tworzy wynik, następnie| egrep -v "COMMAND PID USER"
upuszcza wiersz nagłówka, a następnie| awk '{print $2}'
drukuje drugie pole,| sort -n
przygotowuje liczby, dla| uniq
których każdy unikalny PID jest wysyłany tylko raz. Połączenie tego wszystkiego daje:Ale
pkill -KILL tomcat
lubkillall -KILL tomcat
jest łatwiejsze.źródło
Jedna wkładka z @waltinator jest świetna.
Dodam trochę więcej smaku:
LUB
źródło
To jest skrypt, który wymyśliłem trochę sprawdzania błędów.
źródło
Oto prosta funkcja skorupy ryby
po prostu włóż ten frajer do pliku w tej lokalizacji
~/.config/fish/functions/kill-port.fish
i gotowe. Możesz to tak nazwaćkill-port 8000
źródło