Przedmowa (pomiń prawdziwy problem): Mam aplikację, która nasłuchuje na porcie 843. Ten proces jest uruchamiany jako root. Czasami zabicie procesu (za pomocą ^ C) powoduje, że zwisa on przez długi czas (na zawsze?). Niecierpliwie zabijam to kill -9
. Problem polega na tym, że port 843 nadal nasłuchuje, mimo że nie ma tam żadnej aplikacji.
Spojrzenie na nie lsof -i
pokazuje mi procesów nasłuchujących 843, nawet gdy są uruchamiane jako root. netstat -a
Jednak patrząc na to pokazuje, że nasłuchuje, a nawet niektóre połączenia, które nie zostały zerwane poprawnie:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp6 0 0 localhost.843 localhost.60927 CLOSE_WAIT
tcp6 386 0 localhost.843 localhost.60926 CLOSE_WAIT
tcp6 0 0 localhost.843 localhost.60925 CLOSE_WAIT
tcp6 386 0 localhost.843 localhost.60924 CLOSE_WAIT
tcp46 0 0 *.843 *.* LISTEN
tcp4 0 0 *.843 *.* LISTEN
Podobne pytanie zaleca przede wszystkim, aby nie wdawać się w tę sytuację. To dobra rada, ale trochę trudna, ponieważ nie jest to moja aplikacja. Co więcej, byłoby miło się z tego wydostać.
W jakikolwiek sposób mogę wyjść z tego bałaganu bez ponownego uruchamiania? Czy fakt, że uruchomiłem go jako root, jest ważny? (Potrzebuję tylko roota, aby słuchać portów o niskim numerze, dla których nie znalazłem sposobu bez instalacji oprogramowania takiego jak authbind).
netstat -lntp|grep 843
-lntp
prawdopodobnie oznacza coś innego niż chcesz. W szczególności-p
bierze argument (protokół). Jaki byłby wynik?-p
w OSX nie ma odpowiednika : \