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 jak p1234.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *