Il server Rails dice che la porta è già stata utilizzata, come uccidere quel processo?

Sono su un mac, facendo:

rails server

Ottengo:

2010-12-17 12:35:15] INFO WEBrick 1.3.1 [2010-12-17 12:35:15] INFO ruby 1.8.7 (2010-08-16) [i686-darwin10.4.0] [2010-12-17 12:35:15] WARN TCPServer Error: Address already in use - bind(2) Exiting 

So che posso avviarne uno su una nuova porta, ma voglio uccidere questo processo.

Supponendo che stai cercando di uccidere qualsiasi cosa sia sulla porta 3000 (che è ciò che normalmente usa webrick), digita questo nel tuo terminale per scoprire il PID del processo:

 $ lsof -wni tcp:3000 

Quindi, utilizzare il numero nella colonna PID per terminare il processo:

 $ kill -9 PID 

kill -9 $(lsof -i tcp:3000 -t)

È necessario ottenere ID processo del programma utilizzando la porta tcp 3000. Per ottenere l’ID processo

 lsof -i tcp:3000 -t 

E poi usando l’id del processo, semplicemente uccidi il processo usando il comando kill di ubuntu.

 kill -9 pid 

Oppure esegui semplicemente il comando di combinazione menzionato qui sotto. Prima recupererà il pid e quindi ucciderà quel processo.

 kill -9 $(lsof -i tcp:3000 -t) 

Per chiunque si imbatta in questa domanda che non è su un Mac: supponendo che tu sappia che il tuo server è in esecuzione sulla porta 3000, puoi farlo in un colpo eseguendo quanto segue:

 fuser -k 3000/tcp 

Ma come ha detto Toby, l’implementazione del fuser in Mac OS è piuttosto primitiva e questo comando non funzionerà su Mac.

Alcune volte c’è la possibilità che il server delle rotaie non si chiuda correttamente. È ansible trovare il processo utilizzato da binari

ps aux | rotaie di grep

L’output sarà come

 user 12609 9.8 0.5 66456 45480 pts/0 Sl+ 21:06 0:02 /home/user/.rvm/rubies/ruby-2.2.0-preview1/bin/ruby bin/rails s 

Qui process_id 12609 viene utilizzato dal server delle guide.

Puoi ucciderlo facilmente per comando

kill -9 12609

Tutte le risposte sopra sono davvero buone, ma avevo bisogno di un modo per digitare il meno ansible nel terminale, quindi ho creato un gioiello per questo. Puoi installare la gem una volta sola ed eseguire il comando ‘shutup’ ogni volta che vuoi uccidere il processo Rails (pur essendo nella cartella corrente).

gem install shutup

quindi vai nella cartella corrente del tuo progetto di rotaie ed esegui

shutup # questo ucciderà il processo Rails attualmente in esecuzione

Puoi usare il comando ‘shutup’ ogni volta che vuoi

DICLAIMER: Io sono il creatore di questa gem

NOTA: se si utilizza rvm, installare la gem a livello globale

 rvm @global do gem install shutup 

ps aux | grep rails usa questo comando per uccidere il server

Digitare:

 man lsof 

Quindi cerca -w, -n e -i

-i: internet stuff -n: rende più veloce -w: triggers / distriggers gli avvisi

Ci sono molti altri dettagli nelle pagine man

Se sei su una macchina Windows, segui questi passaggi.

 c:/project/ cd tmp c:/project/tmp cd pids c:/project/tmp/pids dir 

Ci sarà un file chiamato server.pid

Cancellalo.

 c:/project/tmp/pid> del *.pid 

Questo è tutto.

EDIT: Si prega di fare riferimento a questo