TCPServer错误:地址已在使用中 - bind(2)

Omn*_*ent 89 ruby jekyll

几个星期前Jekyll对我很好,但现在突然间它给了我以下错误:

TCPServer Error: Address already in use - bind(2)
INFO  WEBrick::HTTPServer#start: pid=7300 port=4000

 % lsof -i :4000
 <fetches nothing>
Run Code Online (Sandbox Code Playgroud)

即使端口上没有运行任何东西.以下是详细信息:

 % 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 
Run Code Online (Sandbox Code Playgroud)

这是输出

 % 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
Run Code Online (Sandbox Code Playgroud)

我知道地址没有被使用,jekyll可能因为其他原因而破坏但是抛出了这个错误.我有什么选择?我也尝试过重新安装.

Nao*_*den 218

在终端中输入以查找使用3000端口的进程的PID:

$ lsof -wni tcp:3000
Run Code Online (Sandbox Code Playgroud)

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

$ kill -9 PID
Run Code Online (Sandbox Code Playgroud)

  • 对于阅读此内容的任何人,请确保在最后一个命令中,将"PID"替换为您在PID下看到的实际数字.例如,我跑了`kill -9 11734` (19认同)

Fon*_*zie 16

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

我在Mac OS X 10.10.3上遇到了这个问题.我之前从未安装/使用过Jekyll.我无法使用其默认端口号4000启动jekyll服务器.原因是该端口与NoMachine使用的端口相同.同

$ sudo lsof -wni tcp:4000
Run Code Online (Sandbox Code Playgroud)

注意:不运行此命令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)
Run Code Online (Sandbox Code Playgroud)

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

$ sudo kill -9 449
Run Code Online (Sandbox Code Playgroud)

不起作用,因为NoMachine的nxd进程将继续重新启动,使用新的PID.

因此,我不得不:

  • 将我在站点中的jekyll服务器端口更改_config.yml为另一个备用端口.我在下面添加了一行,_config.yml然后就可以了.

    port: 3000 # change server port to 3000

要么

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


小智 10

Ctrl-Z不会终止程序,而是暂停程序并将其发送到后台.您可以使用"fg"命令恢复该程序.要实际终止它,请使用Ctrl-C.

实际的错误消息似乎是假的,可以忽略.我收到相同的错误消息"正在使用的地址"但jekyll无论如何在预期的端口工作正常.