web-dev-qa-db-fra.com

script shell pour tuer le processus d'écoute sur le port 3000?

Je veux définir un alias bash nommé kill3000 pour automatiser la tâche suivante:

$ 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
73
Jonathan
alias kill3000="fuser -k -n tcp 3000"
106
SamB

Essaye ça:

    kill -9 $(lsof -i:3000 -t)

Le drapeau -t est ce que vous voulez: il affiche le PID, et rien d’autre.

MISE À JOUR

Si le processus n’est pas trouvé et que vous ne voulez pas voir le message d’erreur:

    kill -9 $(lsof -i:3000 -t) 2> /dev/null

En supposant que vous exécutez bash.

MISE À JOUR

La suggestion de Basile est excellente: nous devrions d'abord essayer de terminer le processus normalement kill -TERM, en cas d'échec, alors kill -KILL (AKA kill -9):

    pid=$(lsof -i:3000 -t); kill -TERM $pid || kill -KILL $pid

Vous voudrez peut-être en faire une fonction bash.

45
Hai Vu

Une autre option utilisant la commande originale lsof:

lsof -n -i:3000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs kill -9

Si vous voulez utiliser ceci dans un script Shell, vous pouvez ajouter le -r flag à xargs pour traiter le cas où aucun processus n’écoute:

... | xargs -r kill -9
10
Niklas B.

fuser -k 3000/tcp devrait également fonctionner

3
Dmitriusan
fuser -n tcp 3000

Donnera la sortie de

3000/tcp:     <$pid>

Alors tu pourrais faire:

fuser -n tcp 3000 | awk '{ print $2 }' | xargs -r kill
3
synthesizerpatel

Que diriez-vous

alias kill3000="lsof -i:3000 | grep LISTEN | awk '{print $2}' | xargs kill -9"
3
dgw