Trovare il PID del processo utilizzando una porta specifica?


392

Sto installando hadoop sul mio sistema Ubuntu. Quando lo avvio, segnala che la porta 9000 è occupata.

Ero solito:

netstat -nlp|grep 9000

per vedere se esiste una tale porta e ho ottenuto questo:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Ma come posso ottenere il PID del processo che lo sta trattenendo?




netstatIl comando potrebbe funzionare in molti sistemi operativi per permetterti di ottenerlo, devi solo trovare gli argomenti che ti garantiranno che mostrerà i pid lungo ogni porta aperta conosciuta.
Luciano,

Risposte:


474

Su Linux, devi essere root o il proprietario del processo per ottenere le informazioni che desideri. In quanto tale, per i processi in esecuzione come un altro utente, anteporre sudoè la maggior parte di ciò di cui hai bisogno. Inoltre, sui moderni sistemi Linux, ssè uno strumento da utilizzare per fare questo:

$ 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))

Puoi anche utilizzare la stessa chiamata che stai utilizzando, ma ricorda di sudo:

$ sudo netstat -nlp | grep :80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

Puoi anche usare lsof:

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

36
Nota: in OSX, l' -popzione è per protocollo anziché per processo. Vedi questa domanda
Bryan P

3
@BryanP l'OP ha chiesto Ubuntu, quindi è un po 'irrilevante ...
Adam B,

43
@AdamB A meno che un utente Mac non sia arrivato qui alla ricerca diFinding the PID of the process using a specific port
mraaroncruz,

2
Questa risposta sarebbe probabilmente migliorata ponendo la necessità sudoal vertice.
Nacht,

2
@MrOnyancha Usa le opzioni terse (-t) -lsof -ti tcp:80
Mohnish,

138

Inoltre puoi usare l' lsofutilità. Devi essere root.

# 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
Questo comando ti darà anche processi con establishedconnessioni, non solo processi listening.
firelynx,

1
Non necessariamente per essere root. E, per coloro che vogliono ottenere solo PID, è possibile lsof -i :25 -Fp, che produce output simili p1234.
Robert

12

Sto usando "CentOS 7 minimal" che non ha né netstatnessuno dei due lsof. Ma molte distribuzioni di Linux hanno il comando statistiche socket (cioè ss).

Ecco un esempio di esecuzione:

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

1
Vedi anchess -pntl 'sport = :6379'
Stéphane Chazelas il

10

Eseguire il comando con sudoti darebbe il PID. Sulla mia macchina di sviluppo ottengo:

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

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

E come menzionato in altre risposte puoi anche usare ssi lsofcomandi o .


comando in esecuzione come sudoID processo di visualizzazione
Eugen Konkov,

Ma cosa succede se sudo netstat -nlp | grep 34157si visualizza ancora -anziché PID?
Eugen Konkov,

8

Inoltre puoi usare fuser:

fuser -v -n tcp 22

L'output :

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

Non funziona il fusore -v -n tcp 80 , anche io provo con sudo
SuperKrish

1
Nota: questo richiede sudoche anche il processo offensivo sia iniziato consudo
laggingreflex il

1
Questa è una buona cosa da ricordare in generale. I comandi in Linux generalmente non forniscono informazioni sui processi avviati da root / sudo a meno che il comando non venga eseguito con Sudo. Questo è vero anche quando il comando normalmente non ha bisogno di sudo per funzionare correttamente.
njfife,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.