macos killall Trova(e uccide) il processo di bloccare la porta 3000 su Mac




list process mac (23)

Per forzare con forza un processo del genere, utilizzare il seguente comando

lsof -n -i4TCP:3000 

Dove 3000 è il numero di porta in cui è in esecuzione il processo

questo restituisce l'ID di processo (PID) ed eseguito

kill -9 "PID"

Sostituisci PID con il numero che ottieni dopo aver eseguito il primo comando

Come trovo i processi che ascoltano / usano le mie porte TCP? Sono su mac os x.

A volte, dopo un crash o qualche bug, la mia app di rails sta bloccando la porta 3000. Non riesco a trovarla usando ps -ef ... Come faccio a trovare la cosa stupida e ad ucciderla brutalmente ...?

Quando lo fai

rails server

ottengo

Indirizzo già in uso - bind (2) (Errno :: EADDRINUSE)

Aggiornamento 2014:

Per completare alcune delle risposte seguenti: Dopo aver eseguito i comandi kill, potrebbe essere necessario eliminare il file pid rm ~/mypath/myrailsapp/tmp/pids/server.pid


puoi usare il comando

lsof -h

l'uso di questo comando per trovare la porta è

-i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]

Nel tuo caso entra

lsof -i :3000

Ecco una funzione bash di supporto per uccidere più processi per nome o porta

fkill() {
  for i in [email protected];do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs [email protected] sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Uso:

$ fkill [process name] [process port]

Esempio:

$ fkill someapp :8080 node :3333 :9000

Dovresti provare questo codice usando il terminale:

$ killall -9 ruby

Dovresti provare questo, questa tecnica è indipendente dal sistema operativo.

Di fianco alla tua applicazione c'è una cartella chiamata tmp, all'interno della quale c'è un'altra cartella chiamata pids. Quel file contiene il file pid del server. Basta cancellare quel file. la porta si uccide automaticamente.

Penso che questo sia il modo semplice.


TL; DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

Se ti trovi in ​​una situazione in cui ci sono sia client che server che utilizzano la porta, ad esempio:

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

allora probabilmente non vuoi ucciderli entrambi.

In questa situazione puoi usare -sTCP:LISTEN mostra solo il pid dei processi che stanno ascoltando. Combinando questo con il formato tt- -t puoi uccidere automaticamente il processo:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

lsof -P | grep ':3000' | awk '{print $2}'

Questo ti darà solo il pid, testato su MacOS.


Nel tuo .bash_profile , crea un collegamento per terminate il processo 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

Quindi, chiama $terminate se è bloccato.


Trova e uccidi:

Questa singola riga di comando è semplice e funziona correttamente.

kill -9 $(lsof -ti tcp:3000)

Ho fatto una piccola funzione per questo, aggiungilo al tuo file rc ( .bashrc , .zshrc o qualsiasi altra cosa)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

quindi puoi semplicemente digitare kill-by-port 3000 per uccidere il tuo server delle rotaie (sostituendo 3000 per qualsiasi porta su cui è in esecuzione)

in caso contrario, si può sempre digitare kill -9 $(cat tmp/pids/server.pid) dalla directory root delle rotaie


  1. Puoi provare netstat

    netstat -vanp tcp | grep 3000
    
  2. Per macOS El Capitan e successivi (o se il tuo netstat non supporta -p ), usa lsof

    sudo lsof -i tcp:3000 
    
  3. Per l'uso di CentOS 7

    netstat -vanp --tcp | grep 3000
    

Aggiungi a ~/.bash_profile :

function killTcpListen () {
  kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

Quindi source ~/.bash_profile ed esegui

killTcpListen 8080



Se nessuna delle suddette opere tenta:

lsof -n -i4TCP:3000

Questa singola riga di comando è facile da ricordare:

npx kill-port 3000

Per uno strumento più potente con la ricerca:

npx fkill-cli

PS: usano pacchetti javascript di terze parti

Fonti: tweet | github


Trova la connessione aperta

lsof -i -P | grep -i "ascolta"

Uccidi per ID processo

kill -9 'PID'


Un one-liner per estrarre il PID del processo usando la porta 3000 e ucciderlo.

lsof -ti:3000 | xargs kill

L'opzione -t rimuove tutto tranne il PID dall'output di lsof, rendendo facile ucciderlo.


Passo 1: Trova server in esecuzione: ps aux | grep puma ps aux | grep puma Passaggio 2: uccidere i server Kill -9 [numero server]


Niente di sopra ha funzionato per me. Chiunque altro con la mia esperienza potrebbe provare quanto segue (ha funzionato per me):

Correre:

lsof -i :3000 (where 3000 is your current port in use)

quindi controlla lo stato del PID segnalato:

ps ax | grep <PID>

infine, "begone with it":

kill -QUIT <PID>

Possibili modi per ottenere ciò:

superiore

Il comando top è il modo tradizionale di visualizzare l'utilizzo delle risorse del sistema e vedere i processi che occupano la maggior parte delle risorse di sistema. Top mostra un elenco di processi, con quelli che utilizzano la CPU più in alto.

ps

Il comando ps elenca i processi in esecuzione. Il seguente comando elenca tutti i processi in esecuzione sul tuo sistema:

ps -A

È anche possibile reindirizzare l'output tramite grep per cercare un processo specifico senza utilizzare altri comandi. Il seguente comando dovrebbe cercare il processo di Firefox:

ps -A | grep firefox

Il modo più comune di trasmettere segnali a un programma è con il comando kill.

kill PID_of_target_process

lsof

Elenco di tutti i file aperti e dei processi che li hanno aperti.

lsof -i -P | grep -i "listen"
kill -9 PID

o

 lsof -i tcp:3000 

Esegui nella riga di comando su OS-X El Captain:

kill -kill `lsof -t -i tcp:3000`

L'opzione Tergente di lsof restituisce solo il PID.


Trova:

[sudo] lsof -i :3000

Uccidere:

kill -9 <PID>

è inoltre possibile modificare la configurazione sulla porta del server (config / puma.rb) riga 12.

$ porta ENV.fetch ("PORT") {3000}

a

$ porta ENV.fetch ("PORT") {3001}

o qualsiasi porta specifica che ritieni appropriata. questo evita la necessità di andare in una caccia al tesoro per i processi. puoi sempre riavviare il computer. anche quando avvii il server su un'altra porta, normalmente ucciderà il primo server aperto.





process