J'utilise tomcat, et parfois quand je lui dis d'arrêter, il ne tue pas correctement le processus.
Mon chemin est aussi de faire:
lsof -i tcp:8080
qui génère:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 888 root 35u IPv6 780659 0t0 TCP *:http-alt (LISTEN)
java 888 root 39r IPv6 790103 0t0 TCP localhost:58916->localhost:http-alt (CLOSE_WAIT)
java 888 root 40r IPv6 792585 0t0 TCP localhost:58936->localhost:http-alt (CLOSE_WAIT)
java 888 root 75r IPv6 785553 0t0 TCP localhost:58701->localhost:http-alt (CLOSE_WAIT)
java 888 root 77r IPv6 787642 0t0 TCP localhost:58814->localhost:http-alt (CLOSE_WAIT)
java 888 root 130u IPv6 783894 0t0 TCP localhost:58686->localhost:http-alt (CLOSE_WAIT)
java 888 root 353u IPv6 780929 0t0 TCP localhost:58632->localhost:http-alt (CLOSE_WAIT)
Je cours ensuite
kill -9 pid
Je veux un moyen d'obtenir tous les nombres pid et de les tuer. La chose est que je ne sais pas comment isoler ce champ.
tomcat
processus ouvert, vous pouvez utiliserkillall -9 tomcat
Réponses:
Il y a une
-t
option (concise) danslsof
, qui semble faire exactement ce que vous cherchez, c'est-à-direVoir
man lsof
En supposant que vous disposez des autorisations nécessaires, vous pouvez transmettre le résultat à
kill
une liste de PID avec substitution de commande:la source
N'oubliez pas l'
--no-run-if-empty
option de tuer :)De cette façon, kill ne sera exécuté qu'il y a un processus d'écoute, pas besoin de faire le contrôle vous-même.
la source
lsof -i tcp:8080
produit la sortie, puis| egrep -v "COMMAND PID USER"
supprime la ligne d'en-tête, puis| awk '{print $2}'
imprime le 2e champ,| sort -n
prépare les nombres| uniq
, qui ne sort qu'une seule fois chaque PID unique. Le rassemblement donne:Mais,
pkill -KILL tomcat
oukillall -KILL tomcat
c'est plus facile.la source
La doublure unique de @waltinator est géniale.
J'y ajouterai encore plus de saveur:
OU
la source
Ceci est le script que j'ai trouvé avec un peu de vérification d'erreur.
la source
Voici une simple fonction de coquille de poisson
il suffit de coller ce meunier dans un fichier à cet endroit
~/.config/fish/functions/kill-port.fish
et c'est bon. Vous pouvez l'appeler commekill-port 8000
la source