Si intentamos ejecutar una segunda instancia del servidor mientras otra instancia esta ejecutandose obtenemos un error que indica que el puerto está en uso:
[~/sinatra/sinatra-simple(master)]$ rackup Thin web server (v1.6.1 codename Death Proof) Maximum connections set to 1024 Listening on 0.0.0.0:9292, CTRL+C to stop /Users/casiano/.rvm/gems/ruby-2.0.0-p247/gems/eventmachine-1.0.3/lib/eventmachine.rb:526: in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError) from /Users/casiano/.rvm/gems/ruby-2.0.0-p247/gems/eventmachine-1.0.3/lib/eventmachine.rb:526: in `start_server' ...Si sabemos en que puerto esta corriendo - como es el caso - podemos hacer algo así para saber el PID del proceso que lo ocupa:
[~/sinatra/sinatra-simple(master)]$ lsof -i :9292 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 52870 casiano 9u IPv4 0x9f3ffc595152af29 0t0 TCP *:armtechdaemon (LISTEN)Si no lo sabemos podemos hacer:
[~/sinatra/sinatra-simple(master)]$ ps -fA | egrep ruby 501 52870 565 0 11:16AM ttys003 0:00.61 ruby /Users/casiano/.rvm/gems/ruby-2.0.0-p247/bin/rackup 501 53230 52950 0 11:35AM ttys006 0:00.00 egrep rubySi tenemos privilegios suficientes podemos ahora eliminar el proceso:
[~/sinatra/sinatra-simple(master)]$ kill -9 52870
[~/sinatra/sinatra-simple(master)]$ rackup Thin web server (v1.6.1 codename Death Proof) Maximum connections set to 1024 Listening on 0.0.0.0:9292, CTRL+C to stop Killed: 9
El comando
$ lsof -i | egrep -i 'tcp.*(\d+.)+'Nos da una lista bastante completa de como están nuestras conexiones.
-i [i]
selects the listing of files any of whose Internet address matches the address
specified in i. If no address is specified, this option selects the listing of all
Internet and x.25 (HP-UX) network files.
Casiano Rodriguez León 2015-01-07