Zabijanie portu Linux

2

Czasami bywa że port jest już w użyciu bo proces się nie ubił i trzeba szukać PID'a. Osobiście brakowało mi komendy typu kill port_nr dlatego postanowiłem sam sobie ją doprodukować. Tworzę globalny alias tak by komenda nie znikała po restarcie systemu. Funkcja poniżej.

alias killPort="_killPort(){
           if [ \$# -eq 1 ]; then
                pidId=\$(lsof -i -n -P | grep LISTEN | grep \"\$1\" | awk '{print \$2}');
                if [ \"\$pidId\" != \"\" ]; then
                   echo \$pidId | xargs kill;
                else
                   echo \"Port is not in use\";
                fi
           else
             echo \"Missing port argument\";
           fi;
        };
        _killPort"

instalacja : dodanie do pliku ~/.bashrc tj:

  1. sudo nano ~/.bashrc i można wkleić pod alias alert=... )
    aliasy_bashrc
  2. restart systemu
    od tego czasu można używać killPort port_nr
    oczywiście nazwę aliasu (a tym samym komendy) można ustawić sobie dowolnie

--- EDIT ---
po zaproponowanych zmianach przedstawiłbym to w ostatecznej formie jako :

alias killPort="_killPort() {
            if [ \$# -eq 1 ]; then
                if [ \"\`fuser -n tcp \$1\`\" != \"\" ]; then
                   fuser -n tcp \$1 --kill >/dev/null
                else
                   echo \"Port is not in use\";
                fi
           else
             echo \"Missing port argument\";
           fi;
}
_killPort"

If'y zostawiam do wyświetlania i obsługi błędów ;)

1
  1. Skoro to jest takie długie, to czemu nie normalny plik wykonywalny umieszczony gdzieś w PATH?
  2. Używanie sudo tutaj jest IMHO raczej słabym pomysłem, tak samo jak zawsze używanie SIGKILL.
  3. Po co grep i awk skoro można to zrobić jednym poleceniem?
  4. To zadziała tylko na Linuksach, bo BSD mają inne flagi i output z lsof
2

Wersja po moich przeróbkach (nietestowana i przyjmująca argument w trochę innej formie):

#!/bin/sh

[ $# -lt 1 ] || (echo "Need to pass port specification" >&2; exit 1)

port_spec="$1"
shift 1

lsof -nP -i"$port_spec" | sed -nE 's/^p//p' | xargs kill "$@"
0

Fajne rozwiązanie powyżej, ale wymaga dopracowania . Moje jest dłuższe bo ma działać dobrze i tyle nie chce by mi sypało kilometrowych błędów w konsoli
jak coś źle wpiszę. Działa dobrze i to mi odpowiada. Chociaż wezmę pod uwagę przeoczoną komendę xargs

1

fuser pozwala zarówno wyszukiwać PID-y po portach jak i je zabijać z flagą --kill:

fuser -n tcp 6024 --kill

1 użytkowników online, w tym zalogowanych: 0, gości: 1