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 son listening.
  • No necesariamente para ser root. Y, para aquellos que solo quieren obtener PID, pueden lsof -i :25 -Fp, que produce resultados como p1234.

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ó con sudo
  • 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *