Je fais souvent par exemple
sudo netstat -lpn |grep :8088
voir la sortie
tcp6 0 0 :::8088 :::* LISTEN 11189/java
et alors
sudo kill -kill 11189
J'aimerais avoir une commande plus pratique exactement comme killatport 8088
celle qui utilise le numéro de port tcp comme variable et que je peux créer comme alias pour un pipeline qui fait ce que je veux, mais comment puis-je obtenir le PID de la sortie et du tuyau à la commande kill? Je suppose que je pourrais être en mesure d'utiliser awk pour obtenir le PID de la sortie de netstat, mais comment puis-je sauvegarder et faire une correspondance de port exacte afin que l'entrée 80 ne corresponde pas à 8080 et de même? Dois-je plutôt en faire un programme C? Ou existe-t-il déjà un petit utilitaire comme celui-ci?
bash
scripts
command-line
kill
Niklas
la source
la source
mvn jetty:stop
pourrait échouer si l'instance l'a faitOutOfMemoryError
. Lorsque je redémarre les servlets java, il arrive que le port ne soit pas disponible même à un arrêt régulier tel quemvn jetty:stop
. Parfois, le processus peut obtenirOutOfMemoryError
et ne libérera pas le port TCP lors d'un arrêt régulier tel quemvn jetty:stop
.mvn jetty:stop
n'est pas la même chose que d'envoyer SIGTERM, et le jvm devrait toujours être en mesure de traiter SIGTERM même si sa ou ses applications sont hors mem.Réponses:
l'unité de fusion peut le faire:
la source
Une commande peut être formulée comme ceci:
Explication:
netstat -ltpn
l
) sur TCP (t
) et leurs programmes (p
) sans résoudre les numéros de port en noms (n
).grep ":1234\b"
:1234
suivi par une limite (\b
), indiquant la fin du mot (ou nombre, dans notre cas). Cela garantit que nous n'attrapons pas:12345
par exemple.awk '{sub(/\/.*/, "", $NF); print $NF}'
Cette
sub(/regex/,"replacewith", #fieldnumber)
\/.*
""
$NF
, ce qui signifie le dernier champ (c'est-à-dire le champ qui contientPID/program
)print $NF
.Le regex
\/.*
correspond à un littéral/
et à tout ce qui le suit, puis nous le remplaçons par rien, le supprimant essentiellement, il nous reste donc uniquement le numéro PID dans ce champ.xargs -i kill -kill {}
xargs -i
est un programme qui vous permet de faire de la sortie de la commande précédente l'entrée d'une autre commande. Notre commande estkill -kill {}
où{}
indique "la sortie de la commande précédente dans le pipeline", qui est notre numéro PID.Remarque: toute cette commande peut être un peu dangereuse car vous pourriez accidentellement tuer quelque chose que vous ne vouliez pas. Il pourrait être utilisé avec un peu plus de désinfection. Assurez-vous simplement d'obtenir le bon numéro de port lorsque vous l'utilisez.
Si vous souhaitez en faire une fonction, vous pouvez ajouter ce qui suit à votre
~/.bashrc
:Enregistrez et appliquez les modifications à l'aide de
source ~/.bashrc
. Maintenant, vous pouvez utiliser la fonction comme ceci:la source