Próbuję uzyskać wszystkie procesy nasłuchujące na połączenie sieciowe w systemie Mac OS X. netstat
nie ma takiej -p
opcji i próbuję z lsof
lsof -i -sTCP:LISTEN
daje mi uczciwą listę procesów odsłuchowych, ale nie wszystkie. Mogę na przykład telnet do portu 10080, gdzie mam proces nasłuchujący połączenia, ale nie jest to pokazane na wyjściu lsof
. czego mi brakuje?
$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.
ale
$ sudo lsof -n -i | grep 10080
$
amanda
zamiast 10080?-n
wpływa to tylko na adresy, a nie na porty. Aby uzyskać numery portów, muszę również użyć-P
. Dziękilsof -i -sTCP:LISTEN
, bez niego-n
i nie ujawnił też 10080. Więc musisz użyć-P
.Odpowiedzi:
Wszystkie zwracają te same 32 wpisy (
... | wc -l
) na moim mocno używanym Lion MBP.-P -n
uniemożliwialsof
rozpoznawanie nazw i nie blokuje. Brak jednego z nich może być bardzo wolny.Dla UDP:
sudo lsof -iUDP -P -n | egrep -v '(127|::1)'
. Bez-n
i-P
zajmuje to dużo czasu.Przypomnienie: nie obejmuje ustawień zapory.
źródło
-P
. Błędnie założyłem, że-n
dotyczy to nie tylko adresów IP, ale także numerów portów.Najpierw sprawdź identyfikator procesu (pid), który zajął wymagany port (np. 5434):
Zabij ten proces:
źródło
ps aux
nie wymienia portów używanych przez proceskill -9
jako pierwszej opcji pozbycia się procesu jest skrajnym wyborem. Poza tym tak naprawdę nie odpowiada na pytanie, które nie polega na zabijaniu rzeczy, ale na sprawdzeniu, co się dzieje.