linux - usando - netstat puerto especifico
script de shell para matar el proceso de escucha en el puerto 3000? (6)
Otra opción para usar el comando original lsof
:
lsof -n -i:3000 | grep LISTEN | awk ''{ print $2 }'' | uniq | xargs kill -9
Si desea utilizar esto en un script de shell, puede agregar el -r
a xargs
para manejar el caso en el que no hay ningún proceso de escucha:
... | xargs -r kill -9
Esta pregunta ya tiene una respuesta aquí:
Quiero definir un alias de bash llamado kill3000
para automatizar la siguiente tarea:
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 13402 zero 4u IPv4 2847851 0t0 TCP *:3000 (LISTEN)
$ kill -9 13402
Prueba esto:
kill -9 $(lsof -i:3000 -t)
El distintivo -t es lo que desea: muestra PID y nada más.
ACTUALIZAR
En caso de que no se encuentre el proceso y no desee ver el mensaje de error:
kill -9 $(lsof -i:3000 -t) 2> /dev/null
Asumiendo que estás ejecutando Bash.
ACTUALIZAR
La sugerencia de Basile es excelente: primero deberíamos tratar de terminar el proceso normalmente matará a -TERM , si falla, luego matará -KILL (AKA kill -9 ):
pid=$(lsof -i:3000 -t); kill -TERM $pid || kill -KILL $pid
Es posible que desee hacer de esto una función bash.
Qué tal si
alias kill3000="lsof -i:3000 | grep LISTEN | awk ''{print $2}'' | xargs kill -9"
fuser -k 3000/tcp
también debería funcionar
alias kill3000="fuser -k -n tcp 3000"
fuser -n tcp 3000
Producirá la producción de
3000/tcp: <$pid>
Entonces podrías hacer:
fuser -n tcp 3000 | awk ''{ print $2 }'' | xargs -r kill