TCPServer错误:地址已经在使用 – bind(2)

Jekyll几周前对我来说工作得很好,但是现在突然间,它给了我以下错误:

TCPServer Error: Address already in use - bind(2) INFO WEBrick::HTTPServer#start: pid=7300 port=4000 % lsof -i :4000 <fetches nothing> 

即使在端口上没有任何运行。 以下是详细信息:

  % jekyll --version Jekyll 0.11.2 % where jekyll /home/bhaarat/.rvm/gems/ruby-1.9.2-p290/bin/jekyll /usr/bin/jekyll % ruby --version ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux] % rvm --version rvm 1.10.0 

这是输出

  % jekyll --server Configuration from /home/bhaarat/blog/omnipresent.github.com/_config.yml Auto-regenerating enabled: /home/bhaarat/blog/omnipresent.github.com -> /home/bhaarat/blog/omnipresent.github.com/_site [2012-04-21 13:46:40] regeneration: 38 files changed [2012-04-21 13:46:40] INFO WEBrick 1.3.1 [2012-04-21 13:46:40] INFO ruby 1.9.2 (2011-07-09) [i686-linux] [2012-04-21 13:46:40] WARN TCPServer Error: Address already in use - bind(2) [2012-04-21 13:46:40] INFO WEBrick::HTTPServer#start: pid=7382 port=4000 

我知道这个地址没有被使用,而且jekyll可能因为其他原因而中断了,但是抛出了这个错误。 我有什么select? 我试过重新安装。

在terminal中input以查找使用3000端口的进程的PID:

 $ lsof -wni tcp:3000 

然后,使用PID列中的数字来终止进程:

 $ kill -9 PID 

我没有资格发表评论。 所以我添加了一个新的答案。

我在Mac OS X 10.10.3上遇到了这个问题。 而我从来没有安装/使用Jekyll。 我无法启动它的默认端口号为4000的jekyll服务器。原因是这个端口和NoMachine使用的一样。 同

 $ sudo lsof -wni tcp:4000 

注意:不使用sudo运行这个命令将不会有输出。

我看到了这个输出:

 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nxd 449 nx 3u IPv4 0x8d22************ 0t0 TCP *:terabase (LISTEN) nxd 449 nx 4u IPv6 0x8d22************ 0t0 TCP *:terabase (LISTEN) 

端口4000被nxd占用,这是NoMachine启动的过程。 和

 $ sudo kill -9 449 

将无法正常工作,因为NoMachine的nxd进程将通过新的PID继续重新启动。

所以,我必须要么:

  • 将站点_config.yml中的我的jekyll服务器端口更改为另一个。 我将下面的行添加到_config.yml ,它工作。

    port: 3000 # change server port to 3000

要么

  • 更改NoMachine的默认nxd端口,或者卸载NoMachine

Ctrl-Z不会终止程序,而是挂起它并将其发送到后台。 您可以使用“fg”命令恢复程序。 要实际终止它,请使用Ctrl-C

实际的错误信息似乎是假的,可以忽略。 我得到了同样的错误信息“使用中的地址”,但jekyll工作正常在预期的端口。

我最近遇到这个问题。

我尝试了上面提到的所有方法,甚至重新启动了我的电脑,但仍然无法解决它! 然后,我删除了jekyll,并安装了一个新的版本,它只是工作。

gem uninstall jekyll & gem install jekyll (也许你需要超级用户priviledge)。

如果你真的被类似的bug烦恼,这个方法是值得一试…

工作

/_site运行: python -m SimpleHTTPServer 8080

检查您是否已经在运行服务器的地方打开另一个terminal。 如果是这种情况,请使用CTRL-Cclosures服务器,然后释放端口/地址。

首先,您需要find使用3000端口的进程的PID:

  $ps -ef 

输出像这样:

 1003 4953 2614 0 08:51 pts/0 00:00:00 -bash 1003 5634 1 0 08:56 pts/0 00:00:00 spring server | moviestore | started 2 hours ago 1003 5637 5634 0 08:56 ? 00:00:01 spring app | moviestore | started 2 hours ago | development mode 1003 6078 4953 0 09:03 pts/0 00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore] 1003 6117 2614 0 09:03 pts/1 00:00:00 -bash root 6520 2 0 09:57 ? 00:00:00 [kworker/u8:2] root 6936 1225 0 11:09 ? 00:00:00 [lightdm] <defunct> 1003 7084 1 0 11:09 ? 00:00:00 /usr/bin/python /usr/share/apport/apport-gtk 1003 7475 1 0 11:10 ? 00:00:00 /usr/bin/python /usr/share/apport/apport-gtk root 8739 1225 1 11:29 tty8 00:00:11 /usr/bin/X :1 -auth /var/run/lightdm/root/:1 -nolisten tcp vt8 -novtswitch root 8853 1225 0 11:29 ? 00:00:00 lightdm --session-child 13 22 1002 8943 1 0 11:30 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login 1002 8954 8853 0 11:30 ? 00:00:00 gnome-session --session=ubuntu 1002 8992 8954 0 11:30 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu 1002 8995 1 0 11:30 ? 00:00:00 /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu 1002 8996 1 0 11:30 ? 00:00:00 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 1002 9007 8954 0 11:30 ? 00:00:00 /usr/lib/gnome-settings-daemon/gnome-settings-daemon 1002 9015 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfsd 1002 9018 8954 1 11:30 ? 00:00:07 compiz 1002 9021 1 0 11:30 ? 00:00:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 1002 9028 8954 0 11:30 ? 00:00:00 /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 1002 9029 8954 0 11:30 ? 00:00:01 nautilus -n 1002 9030 8954 0 11:30 ? 00:00:00 /usr/lib/gnome-settings-daemon/gnome-fallback-mount-helper 1002 9031 8954 0 11:30 ? 00:00:00 nm-applet 1002 9032 8954 0 11:30 ? 00:00:02 /opt/mTrac/mTrac 1002 9033 8954 0 11:30 ? 00:00:00 bluetooth-applet 1002 9045 9032 0 11:30 ? 00:00:00 /opt/mTrac/mTrac --type=zygote --no-sandbox 1002 9050 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor 1002 9054 1 0 11:30 ? 00:00:00 /usr/bin/pulseaudio --start --log-target=syslog 1002 9057 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor 1002 9062 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-afc-volume-monitor 

在这里你可以看到:

 1003 6078 4953 0 09:03 pts/0 00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore] 

本地主机:3000有pid: 6078

杀死这个过程

 $sudo kill 6078 

然后运行

 $rails s