【问题标题】:Trying to exit Ruby processes试图退出 Ruby 进程
【发布时间】:2015-09-09 16:23:33
【问题描述】:

当我尝试退出 ruby​​ 进程,即 specs、rails 控制台和 binding.pry 调用时,有两个选项:ctrl+c、ctrl+z,或者如果事情真的卡住了,打开一个单独的选项卡并 @ 987654324@。但是,当我第一次 ctrl+c 时,终端输出 Exiting... Interrupt again to exit immediately. 但永久挂起。如果我再次 ctrl+c 强制退出,它会成功退出。但是,从那时起,我再也看不到我在 shell 中输入的内容了。所以如果我输入ls,该行仍然会显示为空白,但如果我按回车,它将成功执行ls 命令。

当我 ctrl+z 时,它成功地停止了进程。然而,在这样做了几次之后,我最终运行了一堆 ruby​​ 进程,这似乎阻止了运行新的 ruby​​ 进程。在这种情况下,killall ruby 什么都不做(也没有任何派生类,例如通过pid 查找)。我必须打开活动监视器 (mac) 并单独强制退出每个 proc。

任何想法我如何设法让自己陷入这个/如何解决它?

【问题讨论】:

  • 一句话送给你:SIGKILL。如killall -m ruby -9。我一直使用spring。那东西不会优雅地退出。
  • 至于为什么它会发生在你的机器上,我不知道。一定有什么不同。比较两台机器的规格/配置。
  • 杀死一个挂起的进程是行不通的,除非你用 SIGKILL 杀死它。
  • GitHub 存在问题:github.com/pry/pry/issues/1183
  • @Sergio,我想起了电影毕业生中本杰明和他的一位长辈之间的brief, but famous, conversation

标签: ruby


【解决方案1】:

杀死所有你的Ruby实例是一种霰弹枪方法;你可能会击中你不想要的目标,所以我建议避免它。

当您的 shell 不再显示您正在输入的内容时,您需要(盲目地)输入 reset 以重置终端。

Ctrl+Z 不会杀死你的进程,它只是被挂起。你应该得到一个告诉你工作编号的输出,比如:

[1]  + 95295 suspended  man reset

这里,1 是工作编号。然后,您可以通过键入 fg %<jobnumber> 来恢复命令,在此示例中为 fg %1。或者你可以用kill -9 %<jobnumber> 杀死它,比如kill -9 %1

【讨论】:

  • 太棒了,不再经常重新进入同一个目录,谢谢!
  • 或者只是 fg 恢复当前工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2020-03-25
相关资源
最近更新 更多