Comment trouver (et tuer) les processus qui écoutent / utilisent mes ports TCP? Je suis sur mac os x.
Parfois, après un crash ou un bug, mon application rails verrouille le port 3000. Je ne le trouve pas en utilisant ps -ef ...
En faisant
rails server
Je reçois
Adresse déjà utilisée - bind (2) (Errno :: EADDRINUSE)
Mise à jour 2014:
Pour compléter certaines des réponses ci-dessous: Après avoir exécuté les commandes kill, la suppression du fichier pid peut être nécessaire rm ~/mypath/myrailsapp/tmp/pids/server.pid
function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }
Réponses:
Tu peux essayer
netstat
Pour macOS El Capitan et plus récent (ou si votre netstat ne prend pas en charge
-p
), utilisezlsof
Pour utiliser Centos 7
la source
lsof -t -i tcp:#{ARGV.first} | xargs kill
)lsof -t -i tcp:1234 | xargs kill
~/.bash_profile
:findandkill() { port=$(lsof -n -i4TCP:$1 | grep LISTEN | awk '{ print $2 }') kill -9 $port } alias killport=findandkill
Alors maintenant, je dois juste taperkillport 8080
et cela me fait gagner quelques secondessudo
avant le lsof si vous ne voyez aucune sortie-P
à lalsof
commande pour que le port brut soit visible dans la sortie:lsof -P -i:3000
Trouver:
Tuer:
la source
kill -15 <PID>
avant de recourir à la-9
sécurité.kill <PID>
pas suffisant / dangereux / incomplet?kill -15
donne au processus une chance de se nettoyer après lui-même.-9
fait.Rien au-dessus n'a fonctionné pour moi. N'importe qui d'autre avec mon expérience pourrait essayer ce qui suit (a fonctionné pour moi):
Courir:
puis vérifiez l'état du PID signalé:
enfin, "fini avec ça":
la source
kill -TERM
(ou justekill
) avantkill -QUIT
. Tous les processus ne feront pas un arrêt ordonné sur SIGQUIT.Une ligne pour extraire le PID du processus en utilisant le port 3000 et le tuer.
L'indicateur -t supprime tout sauf le PID de la sortie lsof, ce qui facilite sa suppression.
la source
lsof -ti:3000 -sTCP:LISTEN
Solution la plus simple :
Pour un port unique:
Tuez plusieurs ports avec une seule ligne de commande:
82500 (ID de processus / PID)
82499
82499 82500
Termine les processus 82499 et 82500 en une seule commande.
Pour l'utiliser dans des
package.json
scripts:"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }
la source
Cette ligne de commande unique est facile à retenir:
npx kill-port 3000
Pour un outil plus puissant avec recherche:
npx fkill-cli
PS: Ils utilisent des packages javascript tiers.
npx
est intégré à Node.js.Sources: tweet | github
la source
npx
est fourni avecnpm
ce qui vient avecnode.js
, donc ce n'est pas un paquet séparé. Mettez simplement à jour votre node.js et vos versions de npm.Vous pouvez utiliser
lsof -i:3000
.C'est "Liste des fichiers ouverts". Cela vous donne une liste des processus et des fichiers et ports qu'ils utilisent.
la source
lsof -i:3000
.Dans votre
.bash_profile
, créez un raccourci pourterminate
le processus 3000:Ensuite, appelez
$terminate
s'il est bloqué.la source
Pour tuer de force un processus comme celui-ci, utilisez la commande suivante
Où 3000 est le numéro de port sur lequel le processus s'exécute
cela renvoie l'ID de processus (PID) et s'exécute
Remplacez PID par le numéro que vous obtenez après avoir exécuté la première commande
la source
Cela vous donnera juste le pid, testé sur MacOS.
la source
lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9
Exécutez en ligne de commande sur OS-X El Captain:
L'option laconique de lsof renvoie uniquement le PID.
la source
L'une des façons de tuer un processus sur un port est d'utiliser la bibliothèque python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Une fois installé, il suffit de:
la source
lsof -t -i:3000
.. semble inutile.Pour afficher les processus bloquant le port:
netstat -vanp tcp | grep 3000
Pour tuer les processus bloquant le port:
kill $(lsof -t -i :3000)
la source
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Il fonctionnera cependant dans la plupart des distributions Linux3000
est occupé. Cependant, si aucun processus ne bloque le port, vous obtiendrez unekill: not enough arguments
erreur.netstat -vanp tcp | grep 3000
, pour votre port occupé?bash
etzsh
shell. Fonctionne bien pour moi. Je ne sais pas pourquoi cela ne fonctionne pas pour vous. Peut-être quelque chose avec High Sierra? Je n'ai aucune idée: /Trouvez la connexion ouverte
Tuer par ID de processus
la source
Trouvez et tuez:
Cette ligne de commande unique est facile et fonctionne correctement.
la source
Moyens possibles pour y parvenir:
Haut
La commande supérieure est la manière traditionnelle d'afficher l'utilisation des ressources de votre système et de voir les processus qui utilisent le plus de ressources système. Top affiche une liste de processus, ceux utilisant le plus de CPU en haut.
ps
La commande ps répertorie les processus en cours d'exécution. La commande suivante répertorie tous les processus en cours d'exécution sur votre système:
Vous pouvez également diriger la sortie via grep pour rechercher un processus spécifique sans utiliser d'autres commandes. La commande suivante rechercherait le processus Firefox:
La façon la plus courante de transmettre des signaux à un programme est d'utiliser la commande kill.
lsof
Liste de tous les fichiers ouverts et des processus qui les ont ouverts.
ou
la source
lsof -i tcp:port_number
- listera le processus en cours d'exécution sur ce portkill -9 PID
- va tuer le processusdans votre cas, ce sera
lsof -i tcp:3000
à partir de votre terminal, trouvez le PID du processuskill -9 PID
la source
Ces deux commandes vous aideront à trouver et à tuer le processus du serveur
la source
Ajouter à
~/.bash_profile
:Ensuite
source ~/.bash_profile
et exécutezkillTcpListen 8080
la source
En utilisant l' outil fkill de sindresorhus , vous pouvez le faire:
la source
TL; DR:
Si vous êtes dans une situation où des clients et des serveurs utilisent le port, par exemple:
alors vous ne voudrez probablement pas tuer les deux.
Dans cette situation, vous pouvez utiliser
-sTCP:LISTEN
pour afficher uniquement le pid des processus qui écoutent. En combinant cela avec le-t
format laconique, vous pouvez automatiquement tuer le processus:la source
J'ai fait une petite fonction pour cela, l'ajoute à votre fichier rc (
.bashrc
,.zshrc
ou autre)alors vous pouvez simplement taper
kill-by-port 3000
pour tuer votre serveur rails (en remplaçant 3000 par le port sur lequel il fonctionne)à défaut, vous pouvez toujours taper à
kill -9 $(cat tmp/pids/server.pid)
partir du répertoire racine de railsla source
\$PORT
pour que le message s'affiche correctement. Sinon, ça marche très bien!Pour tuer plusieurs ports.
J'espère que cette aide!
la source
Vous devriez essayer ceci, cette technique est indépendante du système d'exploitation.
À côté de votre application, il y a un dossier appelé tmp, à l'intérieur il y a un autre dossier appelé pids. Ce fichier contient le fichier pid du serveur. Supprimez simplement ce fichier. le port se tue automatiquement.
Je pense que c'est la manière la plus simple.
la source
Voici une fonction d'assistance bash pour tuer plusieurs processus par nom ou port
Usage:
Exemple:
la source
Vous pouvez essayer ceci
la source
Si vous voulez un moyen sans code - ouvrez le gestionnaire d'activités et forcez le nœud de suppression :)
la source
J'utilise ceci:
cat tmp/pids/server.pid | pbcopy
alors
kill -9 'paste'
la source
Étape 1: Trouvez le serveur qui fonctionne:
ps aux | grep puma
Étape 2: Tuez ces serveurs Tuez -9 [numéro de serveur]la source
Sous mac OS
kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')
la source