Zabij dowolną usługę działającą na określonym porcie


13

Próbuję napisać skrypt, który zabija usługę działającą na określonym porcie. To jest mój skrypt:

a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a

To jest program Java. Ten skrypt czasami działa, ale przez większość czasu w tajemniczy sposób zawodzi.

Czy istnieje inny sposób zabicia usługi działającej na porcie? Mój port to 4990.


Twój skrypt zabiłby również procesy Java uruchomione na innych zwierzakach, takich jak 14990.
— roaima

Odpowiedzi:


32

Możesz spróbować fuser:

fuser -k 4990/tcp

Lub za pomocą, lsofaby uzyskać identyfikator procesu, a następnie przesłać do kill:

kill $(sudo lsof -t -i:4990)

Czy powinienem wymienić tcp na Java?
— Abhishek dot py py

@Abhishekdotpy: Nie, użyj tcp.
— cuonglm

Dziękuję za tę -tflagę, tak długo jej potrzebowałem.
— Jackson,

Czy możesz podpowiedzieć, jak poprawnie przekazać ostatnią linię do ssh?
— Vladimir Protsenko

@VladimirProtsenko czy możesz podać więcej kontekstu?
— cuonglm

4

Jeśli chcesz zabić dowolną usługę lub proces działający na porcie 8080, najpierw musisz znaleźć numer identyfikacyjny procesu 8080 (PID), a następnie go zabić. Uruchom następującą komendę, aby znaleźć numer 8080 portu PID:

sudo lsof -t -i:8080

Tutaj,

  • sudo - polecenie zapytania o uprawnienia administratora (identyfikator użytkownika i hasło).
  • lsof - lista plików (służy również do wyświetlania listy powiązanych procesów)
  • -t - wyświetla tylko identyfikator procesu
  • -i - pokazuje tylko proces związany z połączeniami internetowymi
  • : 8080 - wyświetla tylko procesy w tym numerze portu

Możesz więc teraz łatwo zabić swój PID za pomocą następującego polecenia:

sudo kill -9 <PID>

Tutaj,

  • kill - polecenie zabicia procesu
  • -9 - siłą

Możesz użyć jednego polecenia, aby zabić proces na określonym porcie za pomocą następującego polecenia:

sudo kill -9 $(sudo lsof -t -i:8000)

Aby uzyskać więcej informacji, zobacz poniższy link Jak zabić proces na określonym porcie w systemie Linux


Użycie nie kill -9daje procesowi docelowemu możliwości uporządkowania. Rozważ użycie zwykłego kill, przynajmniej na początku.
— roaima,

1
<?php
  $port = $argv[1]; 
  if(!empty($port) && is_numeric($port) ){
  $pid = trim(shell_exec("lsof -t -i:".$port));
  if(!empty($pid)){
     shell_exec("sudo kill -9 ".$pid);
     echo "pid : ".$pid."  killed which is listened port : ".$port."\xA";
  }
  else{
     echo " [X] no such process found for pid : ".$port."\xA";
  }
  }
  else{ 
     echo " invalid pid \xA";
  }
?>
  1. utwórz plik php kill.php
  2. uruchom plik php z wymaganym portem $ php kill.php 8088

1
Użycie nie kill -9daje procesowi docelowemu możliwości uporządkowania. Rozważ użycie zwykłego kill, przynajmniej na początku.
— roaima,

+1 za użycie PHP do tego zadania.
— Bananguin

@ G-Man przez pomyłkę dodano
— nivas

@Banguanguin, aby zabić dokładny identyfikator procesu dla danego portu, używam tego podczas wykonywania procesu
— grupowego za pomocą Jenkinsa

podczas uruchamiania skryptów i jego zawierać lsof -t -i:port_idpolecenia, gdy proces Zbuduj port_idlub process idz port_idmoże być pusta, że razem możemy dostać jakiś błąd polecenia, aby uniknąć tego rodzaju błędów jestem przyzwyczajony to. tutaj mogę zabić dokładny identyfikator procesu dla danego portu
— nivas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.