我正在使用 RVM、Ruby 1.9.2 和 Rails 3.0.7
从另一个终端对进程的标准终止也不起作用,但是 kill -9 当然可以。
我发现了一个类似的问题,CTRL+C to Webbrick server ignored,但不清楚该问题是否描述了相同的潜在问题。此外,该决议似乎并不适用,因为我没有在我的 Gemfile 中使用 :git。
更新 1:(现在旧了......请参阅下面的更新 2,了解真正的独家新闻)
我设法将问题缩小到一个宝石。如果您使用以下测试脚本,您也可以看到问题(假设您使用的是 Ubuntu 11.04……10.04 中没有问题)
rm -rf tmpkilltest
rvm 1.9.2
rvm --force gemset delete tmpkilltest
rvm gemset create tmpkilltest
rvm 1.9.2@tmpkilltest
gem install rails -v=3.0.7 --no-rdoc --no-ri
gem install sqlite3 -v=1.3.3 --no-rdoc --no-ri
rails new tmpkilltest
cd tmpkilltest
echo "gem 'barista', '1.0'" >> Gemfile
bundle
rails s
这个问题是由 Rails 与 gem 的交互引起的这一事实让我现在相信这个问题实际上与CTRL +C 到 Webbrick 服务器被忽略有关,尽管上面的测试用例表明这个问题显然不是由使用引起的: git 的宝石。
更新2:
在更新 1中,我提到我将其缩小为宝石。当我穿过那颗宝石时,我最终找到了真正的罪魁祸首。gem 进行了一次系统调用。我对测试脚本进行了非常小的修改,不再加载 barista gem,而是在 application.rb 的末尾附加了一个系统调用。使用该系统调用, ctrl-c 不起作用。删除系统调用,它确实有效。
rm -rf tmpkilltest
rvm 1.9.2
rvm --force gemset delete tmpkilltest
rvm gemset create tmpkilltest
rvm 1.9.2@tmpkilltest
gem install rails -v=3.0.7 --no-rdoc --no-ri
gem install sqlite3 -v=1.3.3 --no-rdoc --no-ri
rails new tmpkilltest
cd tmpkilltest
bundle
echo "\`date\`" >> config/application.rb
rails s
这可以解释这个问题和CTRL+C 与 Webbrick server ignored之间的相似之处。我的预感是他们提到的 gem 也会进行系统调用。