macos - killall - list process mac




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

  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
    

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


È possibile utilizzare lsof -i:3000 .

Questo è "List Open Files". Questo ti dà una lista dei processi e dei file e delle porte che usano.


Aggiungi a ~/.bash_profile :

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

Quindi source ~/.bash_profile ed esegui

killTcpListen 8080


Dovresti provare questo codice usando il terminale:

$ killall -9 ruby

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

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.


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.


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>

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


Per visualizzare i processi che bloccano la porta:

netstat -vanp tcp | grep 3000

Per uccidere i processi che bloccano la porta:

kill $(lsof -t -i :3000)


Prova a usare Ctrl + C invece di Ctrl + Z per terminare l'app in esecuzione in precedenza.

Altrimenti puoi trovare il processo in esecuzione sulla porta 3000 eseguendo [sudo] lsof -i :3000

Quindi uccidere il processo kill -9 <PID>


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


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

Trova e uccidi:

Questa singola riga di comando è semplice e funziona correttamente.

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

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.


Uno dei modi per uccidere un processo su una porta è usare la libreria python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Una volta installato, semplicemente:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully

puoi eseguire questo utilizzando il nodo

installare il modulo usando

npm install freethenport -g

e sul tuo terminale

node freethenport 3000

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

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

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





process