Znalezienie PID procesu przy użyciu określonego portu?


391

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 otrzymałem to:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Ale jak mogę uzyskać PID procesu, który go przetrzymuje?




netstatpolecenie może działać w wielu systemach operacyjnych, aby to umożliwić, wystarczy znaleźć argumenty, które zapewnią wyświetlanie pid wzdłuż każdego znanego otwartego portu.
Luciano,

Odpowiedzi:


474

W systemie Linux użytkownik musi być rootem lub właścicielem procesu, aby uzyskać pożądane informacje. Jako takie, w procesach działających jako inny użytkownik, przygotowywanie sudojest najbardziej potrzebne. Ponadto, w nowoczesnych systemach Linux, ssjest narzędzie do tego celu:

$ 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 także 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żyć lsof:

$ sudo lsof -n -i :80 | grep LISTEN
nginx   125004 nginx    3u  IPv4   6645      0t0  TCP 0.0.0.0:80 (LISTEN)

36
Uwaga: w OSX -popcja dotyczy protokołu, a nie procesu. Zobacz to pytanie
Bryan P

3
@BryanP OP poprosił o Ubuntu, więc to trochę nie ma znaczenia ...
Adam B

43
@AdamB O ile użytkownik Mac nie przybył tutaj, szukającFinding the PID of the process using a specific port
mraaroncruz,

2
Ta odpowiedź prawdopodobnie zostałaby poprawiona poprzez umieszczenie potrzeby sudona szczycie.
Nacht

2
@MrOnyancha Użyj opcji zwięzłych (-t) -lsof -ti tcp:80
Mohnish

138

Możesz także użyć lsofnarzędzia. 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)

9
To polecenie daje również procesy z establishedpołączeniami, a nie tylko same procesy listening.
firelynx,

1
Niekoniecznie musi być rootem. A dla tych, którzy chcą uzyskać tylko PID, możesz lsof -i :25 -Fp, co daje wynik podobny do p1234.
Robert,

12

Używam „CentOS 7 minimalny”, który ma ani netstatani lsof. Ale wiele dystrybucji Linuksa ma polecenie statystyki gniazd (tj ss.).

Oto przykład wykonania:

# ss -tanp | grep 6379
LISTEN   0    128  127.0.0.1:6379   *:*   users:(("redis-server",pid=2531,fd=4))

1
Zobacz takżess -pntl 'sport = :6379'
Stéphane Chazelas

10

Wykonanie polecenia za pomocą sudodałoby ci PID. Na mojej maszynie programistycznej otrzymuję:

$ netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      -

$ sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/java

Jak wspomniano w innych odpowiedziach, możesz także użyć poleceń sslub lsof.


uruchomiono komendę jako sudoidentyfikator procesu wyświetlania
Eugen Konkov

Ale co jeśli sudo netstat -nlp | grep 34157nadal wyświetla się -zamiast PID?
Eugen Konkov

8

Możesz także użyć fuser:

fuser -v -n tcp 22

Wyjście :

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd

Nie działa fuser -v -n tcp 80 , nawet ja próbuję z sudo
SuperKrish

1
Uwaga: Wymaga to, sudojeśli proces przestępstwa również został rozpoczętysudo
laggingreflex

1
Ogólnie dobrze jest pamiętać. Polecenia w systemie Linux na ogół nie podają informacji o procesach uruchomionych przez root / sudo, chyba że polecenie zostanie uruchomione w Sudo. Dzieje się tak nawet wtedy, gdy polecenie zwykle nie potrzebuje sudo do poprawnego działania.
njfife,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.