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 sonolistening
. - Non necessariamente root. Inoltre, per coloro che desiderano ottenere solo il PID, è possibile
lsof -i :25 -Fp
, che produce output comep1234
.
Risposta
Sto utilizzando “CentOS 7 minimal” che non ha né netstat
né lsof
. 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 consudo
- 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.
netstat
potrebbe funzionare in molti sistemi operativi per consentirti di ottenerlo, devi solo trovare gli argomenti che assicureranno che mostrerà i pid lungo ogni porta aperta conosciuta.