Seguro que ya os ha pasado, al iniciar un servicio (o una shell }:-)) falla porque hay otro proceso que ya levantó anteriormente el mismo puerto TCP...
Para encontrar rápidamente que proceso está usando el puerto en cuestión lo más fácil y recurrente es usar el comando "netstat" y bueno... vi una breve entrada en la wiki de SAP y siempre está bien tener una chuleta a mano en el blog... :-P
LINUX:
En este primer ejemplo (Linux) vemos que el proceso con PID 7952 (java) está usando el puerto TCP 8080.
WINDOWS:
En este ejemplo en Windows, encontramos que el proceso con PID 3696 es el que tiene ocupado el puerto (8080).
También es posible usar en Windows "netstat -ab" que mostrará todos los procesos asociados al puerto. La opción "a" lista todas las conexiones y la opción "b" muestra el ejecutable correspondiente.
AIX:
SOLARIS:
El primer comando mostrará la lista con el PID de todos los procesos activos en el sistema. El número de puerto debe ser indicado con el comando "grep".
El PID que está usando el puerto será el inmediatamente anterior a la línea que termina en "port:" ("port: 3900" en el ejemplo anterior).
El segundo comando mostrará la informacion del proceso en sí mismo.
Fuente: https://wiki.scn.sap.com/wiki/display/SI/How+to+find+the+process+binding+a+TCP+port
Para encontrar rápidamente que proceso está usando el puerto en cuestión lo más fácil y recurrente es usar el comando "netstat" y bueno... vi una breve entrada en la wiki de SAP y siempre está bien tener una chuleta a mano en el blog... :-P
LINUX:
> netstat -nepal|grep 8080
tcp 0 0 :::8080 :::* LISTEN 10404 18906159 7952/java
En este primer ejemplo (Linux) vemos que el proceso con PID 7952 (java) está usando el puerto TCP 8080.
WINDOWS:
> netstat -nao|findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 3696
TCP []:8080 []:0 LISTENING 3696
En este ejemplo en Windows, encontramos que el proceso con PID 3696 es el que tiene ocupado el puerto (8080).
También es posible usar en Windows "netstat -ab" que mostrará todos los procesos asociados al puerto. La opción "a" lista todas las conexiones y la opción "b" muestra el ejecutable correspondiente.
AIX:
> netstat -Aan | grep 8000 | grep LISTEN
f1000e000130bbb8 tcp4 0 0 *.8000 *.* LISTEN
> rmsock f1000e000130bbb8 tcpcb
The socket 0xf1000e000130b808 is being held by proccess 13893704 (icman).
> ps -ef | grep 13893704
vmcadm 13893704 9175156 0 Dec 22 - 0:17 icman -attach pf=/usr/sap/VMC/SYS/profile/VMC_DVEBMGS00_is4039
SOLARIS:
> ps -ef| awk '{print $2}'| xargs -I '{}' sh -c 'echo Verifying PID {}; pfiles {} 2>/dev/null|grep "port: 3900"|grep -v grep'
(...)
Verifying PID 3150
Verifying PID 4848
Verifying PID 4891
Verifying PID 7900
sockname: AF_INET 0.0.0.0 port: 3900
Verifying PID 4831
Verifying PID 23568
Verifying PID 7928
Verifying PID 9662
(...)
> ps -ef|grep 7900|grep -v grep
qpkadm 7900 7840 0 Jun 21 ? 1:38 ms.sapQPK_DVEBMGS00 pf=/usr/sap/QPK/SYS/profile/QPK_DVEBMGS00_fs4400
El primer comando mostrará la lista con el PID de todos los procesos activos en el sistema. El número de puerto debe ser indicado con el comando "grep".
El PID que está usando el puerto será el inmediatamente anterior a la línea que termina en "port:
El segundo comando mostrará la informacion del proceso en sí mismo.
Fuente: https://wiki.scn.sap.com/wiki/display/SI/How+to+find+the+process+binding+a+TCP+port
Hola Vicente,
ResponderEliminarTambién con lsof puedes conseguir informacion, por ejemplo:
lsof -i :80
Saludos y enhorabuena por el blog.
Hola Toni, lsof lo conocía pero solo está en Linux/Unix (para Windows tendrias que usar tcpview o similar). El caso es que netstat es más "universal".
EliminarGracias y saludos!
A modo de mnemotecnia me aprendí, para Windows, el "netstat -ano".
ResponderEliminarTambién está fuser 80\tcp , me solo para entornos linux
ResponderEliminarMuy bueno. Solo añadir: Con ls se puede saber la ruta del proceso.
ResponderEliminarVisto aquí: https://www.sysadmit.com/2018/06/linux-que-proceso-usa-un-puerto.html