Estoy instalando hadoop en mi sistema Ubuntu. Cuando lo inicio, informa que el puerto 9000 está ocupado.
Usé:
netstat -nlp|grep 9000
para ver si tal puerto existe y Recibí esto:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Pero, ¿cómo puedo obtener el PID del proceso que lo retiene?
Comentarios
Respuesta
En Linux, debe ser root o el propietario del proceso para obtener la información que desea. Como tal, para los procesos que se ejecutan como otro usuario, anteponer sudo
es la mayor parte de lo que necesita. Además de eso, en los sistemas Linux modernos, ss
es una herramienta a utilizar para hacer esto:
$ 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))
Usted también puede usar la misma invocación que está usando actualmente, pero recuerde sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
También puede use lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Comentarios
- Nota: en OSX, el es para protocolo en lugar de proceso. Vea esta pregunta
- @BryanP el OP solicitó Ubuntu para que ' s un poco irrelevante …
- @AdamB A menos que un usuario de Mac llegara aquí buscando
Finding the PID of the process using a specific port
- Esta respuesta probablemente se mejoraría poniendo la necesidad de
sudo
en la parte superior. - @MrOnyancha Use las opciones concisas (-t) –
lsof -ti tcp:80
Responder
También puede usar lsof
util ity. Necesita ser 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)
Comentarios
- Este comando también le dará procesos con
established
conexiones, no solo procesos que sonlistening
. - No necesariamente para ser root. Y, para aquellos que solo quieren obtener PID, pueden
lsof -i :25 -Fp
, que produce resultados comop1234
.
Respuesta
Estoy usando «CentOS 7 mínimo» que no tiene ni netstat
ni lsof
. Pero muchas distribuciones de Linux tienen el comando de estadísticas de socket (es decir, ss
).
Aquí hay un ejemplo de ejecución:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Comentarios
- Ver también
ss -pntl 'sport = :6379'
Respuesta
También puede usar fuser
:
fuser -v -n tcp 22
El resultado:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Comentarios
- No ' t funcionando fuser -v -n tcp 80 , incluso yo lo intento con sudo
- Nota: Esto requiere
sudo
si el proceso ofensivo también se inició consudo
- Esto es algo bueno para recordar en general. Los comandos en Linux generalmente no ' no dan información sobre los procesos iniciados por root / sudo a menos que el comando se ejecute con Sudo. Esto es cierto incluso cuando el comando normalmente no necesita sudo para ejecutarse correctamente.
Responder
Ejecutar el comando con sudo
le daría el PID
. En mi máquina de desarrollo obtengo:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
Y como se menciona en otras respuestas, también puede usar ss
o los lsof
comandos.
Comentarios
- ejecutar el comando como
sudo
mostrar ID de proceso - Pero, ¿qué pasa si
sudo netstat -nlp | grep 34157
todavía muestra-
en lugar de PID?
Respuesta
Estoy trabajando en un sistema Yocto Linux que tiene un conjunto limitado de herramientas Linux disponibles. Me las arreglé para encontrar el proceso de un puerto en ejecución usando los siguientes comandos (donde encuentro el proceso usando el puerto 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
Como podemos ver arriba, es el programa /usr/sbin/mosquitto
el que «usa el puerto 1883.
netstat
podría funcionar en muchos sistemas de operaciones para permitirle obtener eso, solo tiene que encontrar los argumentos que asegurarán que mostrará pids a lo largo de cada puerto abierto conocido.