Jak znaleźć (i zabić) proces działający na określonym porcie? [duplikować]

Odpowiedzi:

47

Możesz użyć, lsofaby znaleźć proces:

lsof -t -i:4444

wyświetli tylko pid procesu nasłuchującego na porcie 4444. Można po prostu powiedzieć

kill `lsof -t -i:4444`

gdybyś był odważny.

Ernest Friedman-Hill
źródło
14
+1 za „gdybyś był odważny”.
Pan Shickadance,
7

Używasz lsof:

# lsof -n | grep TCP | grep LISTEN | grep 4444

Wynik będzie taki jak:

pname 16125 user 28u IPv6 4835296 TCP *:4444 (LISTEN)

Gdzie pierwsza kolumna to nazwa procesu, a druga kolumna to identyfikator procesu. Następnie analizujesz dane wyjściowe, dowiadujesz się, jaki jest identyfikator procesu (PID) i używasz killpolecenia, aby je zabić.

Pablo Santa Cruz
źródło
1
Nigdy wcześniej nie słyszałem o lsof. Patrząc na stronę podręcznika, wydaje się niezwykle przydatna. Dzięki!
wszystko w Linuksie jest plikiem, a lsof pozwala znaleźć pliki, więc ... tak, bardzo przydatne
jcollum
2

Alternatywnie możesz użyć, netstat -apjeśli lsofnie jest dostępny w twoim systemie (ponieważ nie ma go w systemie busybox, z którym regularnie pracuję).

DaveRandom
źródło
dobra rozmowa, zastanawiałem się, dlaczego to nie działa na obrazie
dokera
2
kill -9 `netstat -lanp --protocol=inet | grep 4444 | awk -F" " '{print $7}' | awk -F"/" '{print $1}'`

Używa netstat do listy nasłuchujących gniazd INET z portami numerycznymi i procesami nadrzędnymi. Filtruje ciąg 4444, usuwa siódmą kolumnę (pid / nazwa procesu) i dalej dzieli ją na „/”, aby uzyskać pid. Przechodzi polecenie zabicia.

Arek B.
źródło
2
Poleciłbym przeciwko zabiciu -9. Nie pozwala na czyszczenie, a niektóre aplikacje internetowe mają większe zasoby, które muszą zostać całkowicie zamknięte.
Rich Homolka,