it-swarm.it

Trovare il PID del processo utilizzando una porta specifica?

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?

427
wuchang

Su Linux, devi essere root o il proprietario del processo per ottenere le informazioni che desideri. Pertanto, 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 è lo 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 usare 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)
529
Chris Down

Inoltre puoi usare l'utilità lsof. 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)
143
Vitaliy

Sto usando "CentOS 7 minimal" che non ha né netstatlsof. Ma molte distribuzioni di Linux hanno il comando statistiche socket (ovvero 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))
14
Oleksandr

Eseguire il comando con Sudo ti 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 i comandi ss o lsof.

12
isapir

Inoltre puoi usare fuser:

fuser -v -n tcp 22

Il risultato :

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