Instaluję hadoop w moim systemie Ubuntu. Kiedy go uruchamiam, zgłasza, że port 9000 jest zajęty.
Użyłem:
netstat -nlp|grep 9000
, aby sprawdzić, czy taki port istnieje i Mam to:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Ale jak mogę uzyskać PID procesu, który go utrzymuje?
Komentarze
Odpowiedź
W systemie Linux musisz być rootem lub właścicielem procesu, aby uzyskać żądane informacje. W związku z tym w przypadku procesów działających jako inny użytkownik dodawanie na początku sudo
to większość potrzebna. Oprócz tego w nowoczesnych systemach Linux ss
jest narzędziem służącym do tego:
$ sudo ss -lptn "sport = :80" State Local Address:Port Peer Address:Port LISTEN 127.0.0.1:80 *:* users:(("nginx",pid=125004,fd=12)) LISTEN ::1:80 :::* users:(("nginx",pid=125004,fd=11))
możesz również użyć tego samego wywołania, którego „obecnie używasz, ale pamiętaj, aby sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
Możesz także użyj lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Komentarze
- Uwaga: w systemie OSX dotyczy protokołu, a nie procesu. Zobacz to pytanie
- @BryanP, który OP poprosił o Ubuntu, aby ' to trochę nieistotne …
- @AdamB Chyba że przybył tu użytkownik Maca szukający
Finding the PID of the process using a specific port
- Ta odpowiedź prawdopodobnie poprawiłaby się, umieszczając
sudo
na górze. - @MrOnyancha Użyj zwięzłych (-t) opcji –
lsof -ti tcp:80
Odpowiedź
Możesz także użyć lsof
util ity. Musisz być rootem.
# lsof -i :25 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME exim4 2799 Debian-exim 3u IPv4 6645 0t0 TCP localhost:smtp (LISTEN) exim4 2799 Debian-exim 4u IPv6 6646 0t0 TCP localhost:smtp (LISTEN)
Komentarze
- To polecenie da ci również procesy z
established
połączenia, a nie tylko procesy, które sąlistening
. - Nie musi być rootem. A dla tych, którzy chcą uzyskać tylko PID, możesz
lsof -i :25 -Fp
, co daje wynik taki jakp1234
.
Odpowiedź
Używam „CentOS 7 minimal”, który nie ma ani netstat
ani lsof
. Ale wiele dystrybucji Linuksa ma polecenie statystyki gniazd (np. ss
).
Oto przykład wykonania:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Komentarze
- Zobacz także
ss -pntl 'sport = :6379'
Odpowiedź
Możesz także użyć fuser
:
fuser -v -n tcp 22
Wynik:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Komentarze
- Nie ma ' t działa fuser -v -n tcp 80 , nawet próbuję z sudo
- Uwaga: wymaga to
sudo
jeśli problematyczny proces został również uruchomiony za pomocąsudo
- Ogólnie rzecz biorąc, dobrze jest o tym pamiętać. Polecenia w Linuksie generalnie nie dają informacji o procesach uruchomionych przez roota / sudo ', chyba że polecenie jest uruchamiane z Sudo. Dzieje się tak nawet wtedy, gdy polecenie zwykle nie wymaga, aby sudo działało poprawnie.
Odpowiedź
Uruchamianie polecenia z sudo
daje PID
. Na moim komputerze programistycznym otrzymuję:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
I jak wspomniano w innych odpowiedziach, możesz również użyć ss
lub polecenia lsof
.
Komentarze
- uruchomione polecenie jako
sudo
wyświetla identyfikator procesu - Ale co, jeśli
sudo netstat -nlp | grep 34157
nadal wyświetla-
zamiast PID?
Odpowiedź
Pracuję na systemie Yocto Linux, który ma ograniczony zestaw dostępnych narzędzi linuksowych. Udało mi się znaleźć proces działającego portu przy użyciu następujących poleceń (gdzie znajduję proces przy użyciu portu 1883):
root@root:~# netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN tcp 0 0 localhost.localdomain:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN tcp 0 0 :::hostmon :::* LISTEN tcp 0 0 localhost:domain :::* LISTEN tcp 0 0 :::ssh :::* LISTEN tcp 0 0 :::1883 :::* LISTEN root@root:~# fuser 1883/tcp 290 root@root:~# ps | grep 290 290 mosquitt 25508 S /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf 12141 root 8444 S grep 290
Jak widać powyżej, to program /usr/sbin/mosquitto
używa portu 1883.
netstat
może działać w wielu systemach operacyjnych, aby to uzyskać, wystarczy znaleźć argumenty, które zapewnią, że wyświetli pidy wzdłuż każdego znanego otwartego portu.