unix - usando - ver puertos abiertos red hat
Determine el proceso pid escuchando en un puerto determinado (7)
Como dice el título, estoy ejecutando múltiples servidores de juego, y cada uno de ellos tiene el mismo name
pero diferente PID
y el número de port
. Me gustaría hacer coincidir el PID
del servidor que está escuchando en cierto puerto, y luego me gustaría matar a este proceso. Lo necesito para completar mi script bash.
¿Es eso posible? Porque no encontró ninguna solución en la web.
Como sockstat no estaba instalado de forma nativa en mi máquina, corté la respuesta de Stanford para usar netstat en su lugar.
netstat -nlp | grep -E "[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/:2000" | awk ''{print $7}'' | sed -e "s///.*//g""
El -p
de netstat
le proporciona el PID del proceso:
netstat -l -p
Editar: El comando que se necesita para obtener los PID de los usuarios de socket en FreeBSD es sockstat
. Como trabajamos durante la discusión con @Cyclone, la línea que hace el trabajo es:
sockstat -4 -l | grep :80 | awk ''{print $3}'' | head -1
Quería programar , usando solo Bash, matar el proceso de escucha en un puerto determinado.
Digamos que el puerto es 8089, y así es como lo hice:
badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk ''{print $7}'' | awk -F/ ''{print $1}'' | head -1)
kill -9 $badPid
¡Espero que esto ayude a alguien más! Sé que va a ayudar a mi equipo.
Versión corta que puede pasar para matar el comando:
lsof -i:80 -t
en Windows, la opción netstat para obtener el pid''s es -o y -p selecciona un filtro de protocolo, ej .: netstat -a -p tcp -o
netstat -nlp
debería decirle el PID de lo que está escuchando en qué puerto.
netstat -p -l | grep $PORT
netstat -p -l | grep $PORT
y lsof -i :$PORT
soluciones lsof -i :$PORT
son buenas, pero prefiero la sintaxis de la extensión fuser $PORT/tcp
a POSIX (que funciona para coreutils
) como con pipe:
pid=`fuser $PORT/tcp`
imprime pid puro para que puedas eliminar la magia sed
.
Una cosa que hace que fuser
my lover tools sea la capacidad de enviar señales a ese proceso directamente (esta sintaxis también es una extensión de POSIX):
$ fuser -k $port/tcp # with SIGKILL
$ fuser -k -15 $port/tcp # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM
También -k es compatible con FreeBSD: http://www.freebsd.org/cgi/man.cgi?query=fuser