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

Ho usato:

netstat -nlp|grep 9000 

per vedere se tale porta esiste e Ho capito:

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

Ma come posso ottenere il PID del processo che lo contiene?

Commenti

Risposta

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 è uno strumento da utilizzare per eseguire questa operazione:

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

Tu può anche utilizzare la stessa chiamata che stai attualmente 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 usa lsof:

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

Commenti

  • Nota: in OSX, -p lopzione è per il protocollo piuttosto che per il processo. Vedi questa domanda
  • @BryanP lOP ha chiesto Ubuntu in modo che ' è un po irrilevante …
  • @AdamB A meno che un utente Mac non sia arrivato qui cercando Finding the PID of the process using a specific port
  • Questa risposta sarebbe probabilmente migliorata inserendo la necessità di sudo in alto.
  • @MrOnyancha Usa le opzioni concise (-t) – lsof -ti tcp:80

Risposta

Inoltre puoi usare lsof util ity. 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) 

Commenti

  • Questo comando ti fornirà anche processi con established connessioni, non solo processi che sono listening.
  • Non necessariamente root. Inoltre, per coloro che desiderano ottenere solo il PID, è possibile lsof -i :25 -Fp, che produce output come p1234.

Risposta

Sto utilizzando “CentOS 7 minimal” che non ha né netstatlsof. Ma molte distribuzioni di Linux hanno il comando delle statistiche sui socket (ad esempio 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)) 

Commenti

  • Vedi anche ss -pntl 'sport = :6379'

Risposta

Inoltre puoi utilizzare fuser:

fuser -v -n tcp 22 

Loutput:

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

Commenti

  • Non ' t funzionante fusore -v -n tcp 80 , anche se provo con sudo
  • Nota: questo richiede sudo se il processo offensivo è stato avviato anche con sudo
  • Questa è una cosa buona 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 necessita di sudo per essere eseguito correttamente.

Answer

Esecuzione del comando con sudo ti darebbe 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 ss o i comandi lsof.

Commenti

  • comando in esecuzione come sudo mostra lID del processo
  • Ma cosa succede se sudo netstat -nlp | grep 34157 mostra ancora - invece di PID?

Risposta

Sto lavorando su un sistema Yocto Linux che ha un insieme limitato di strumenti Linux disponibili. Sono riuscito a trovare il processo di una porta in esecuzione utilizzando i seguenti comandi (dove trovo il processo utilizzando la porta 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  

Come possiamo vedere sopra, è il programma /usr/sbin/mosquitto che utilizza la porta 1883.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *