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
alias kill3000="fuser -k -n tcp 3000"
Essaye ça:
kill -9 $(lsof -i:3000 -t)
Le drapeau -t est ce que vous voulez: il affiche le PID, et rien d’autre.
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.
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.
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
fuser -k 3000/tcp
devrait également fonctionner
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
Que diriez-vous
alias kill3000="lsof -i:3000 | grep LISTEN | awk '{print $2}' | xargs kill -9"