Odpowiedzi:
Istnieje kilka sposobów sprawdzenia, który uruchomiony proces używa portu.
Użycie utrwalacza da PID (y) wielu wystąpień związanych z portem nasłuchującym.
sudo apt-get install psmisc
sudo fuser 80/tcp
80/tcp: 1858 1867 1868 1869 1871
Po dowiedzeniu się, możesz zatrzymać lub zabić proces (y).
Możesz również znaleźć PID i więcej szczegółów za pomocą lsof
sudo lsof -i tcp:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1858 root 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1867 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1868 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1869 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1871 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
Aby ograniczyć się do gniazd nasłuchujących na porcie 80 (w przeciwieństwie do klientów łączących się z portem 80):
sudo lsof -i tcp:80 -s tcp:listen
Aby zabić ich automatycznie:
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
Oto oneliner, który pokazuje polecenie do uruchomienia:
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
Zastąp echoprzez, sudoaby proces został zabity.
echonasudo
80.
Trzy opcje wystawianie otwarte porty są oferowane w JSH „s whatisonport:
netstat -anp --numeric-ports | grep ":${PORT}\>.*:"
fuser -v "${PORT}"/tcp
lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"
Wolę, netstatponieważ jest szybki, zwięzły i może wyświetlać porty otwarte przez innych użytkowników. (Chociaż nadal będzie potrzebował uprawnień administratora / użytkownika, aby wyświetlić listę nazw i PID takich procesów).
$ netstat -anp --numeric-ports | grep ":80\>.*:"
tcp6 0 0 :::80 :::* LISTEN 1914/apache2
$ fuser -v "80/tcp"
USER PID ACCESS COMMAND
80/tcp: root 1914 F.... apache2
www-data 12418 F.... apache2
...
$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2 1914 root 4u IPv6 11920 0t0 TCP *:80 (LISTEN)
apache2 12418 www-data 4u IPv6 11920 0t0 TCP *:80 (LISTEN)
...
W grepdwóch przypadkach można użyć tylko portu lokalnego i pomiń otwarte połączenia ze zdalnym portem 80. (Alternatywą byłoby użycie -lz netstatlub z lsofużyciem -sTCP:LISTEN, ale podobają mi się greps powyżej, ponieważ będą przechwytują również połączenia wychodzące z danego portu, które czasami mogą być interesujące.)
Z lsofużywamy -P, aby wyświetlić :80zamiast :httpaby grep możliwe. Te -S 2siły opcja lsofdo wykonania w krótkim czasie.
Zakładając, że chcemy użyć netstat, możemy pobrać PID w następujący sposób:
$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...
I moglibyśmy nawet przekazać te PID do kill:
... | xargs -d '\n' kill -KILL
Jednak często występuje błąd fałszywie dodatni podczas używania wyrażeń regularnych, więc polecam po prostu przyjrzeć się wyjściowemu wynikowi, netstata następnie ręcznie zdecydować, czy uruchomić:
$ kill -KILL 1914
Mam inny skrypt o nazwie, listopenportsktóry może być interesujący.
Dowiedziałeś się już, który proces zabić: jest to numer procesu, 20570a jego plik binarny ma nazwę httpdzapisaną na końcu wiersza wyniku netstat. Możesz go zabić według numeru kill 20570lub imienia, killall httpdale nie poleciłbym tego zrobić w ten sposób.
Porty mniejsze niż 1024 mają standardowe zastosowanie (normalnie), możesz sprawdzić te i wiele innych less /etc/services. Wpis dotyczący portu 80 jest nawet komentowany:
http 80/tcp www # WorldWideWeb HTTP
Więc najprawdopodobniej jest to serwer WWW. Nazwa masz jest httpdi man httpdpowinno dać dużą wskazówkę, że jest to binarny, który pasuje Apache. Apache jest jednym z dużych graczy, ma kilka wygodnych programów do zarządzania, ale nie potrzebujesz ich do zwykłej akcji start / stop.
Masz Mennicę? Z normalnym pulpitem? Następnie spójrz w Control Centerdół Systemi kliknij Services. Musisz być administratorem, aby cokolwiek tam zrobić. Przewiń w dół, aż znajdziesz coś o nazwie „serwer WWW” (mam lighttpd zamiast Apache i nie wiem dokładnie, jak wyglądałby wpis Apache) i odznacz to.
Jeśli chcesz tylko tymczasowo go zatrzymać, spróbuj w konsoli
sudo service stop httpd
i zacznij od sudo service start httpd. service --status-allzwraca listę wszystkich usług, które servicewie i może obsłużyć. Skrót do restartu usługi (czyli: zatrzymać i uruchomić go w tej kolejności) to service --full-restart SERVICEz SERVICEbycia nazwą usługi, np .: httpdw przypadku Apache.
Większość programów, z którymi się znajdujesz, netstatmożna obsługiwać w ten sposób. Niektóre nie mogą, a niektóre nawet nie mają strony podręcznika, ale są one rzadkie.
Jest na to prosty sposób. Najpierw sprawdź, który proces używa portu 80 przez netstat :
netstat -ntl | grep 80
Teraz masz nazwę procesu i zabij proces za pomocą polecenia killall :
killall -9 process name
killallbez wyjaśnienia lub ostrzeżenia.
-kprzełącznik, który zabija wszystkie pasujące procesy i-izabija interaktywnie (monitując o każdy z nich).