有没有办法在不退出整个 Pry 会话的情况下停止一个长时间运行的命令?

13 浏览
0 Comments

有没有办法在不退出整个 Pry 会话的情况下停止一个长时间运行的命令?

我希望有一种方法来停止 Pry 命令,但我不想退出到我的 shell。使用 Control+C 并不是我想要的。我不是想要退出循环或整个会话。我只是希望在运行一行耗时代码后返回到 Pry 提示符。

0
0 Comments

问题出现的原因是在另一个进程中运行时,该进程可能已经设置了自己的信号处理程序,例如rspecrails s。尝试停止这些进程中的命令实际上会使Pry保持打开状态,但执行进程的关闭工作,因此一旦退出Pry,就会返回到命令行。

为了解决这个问题,可以在Pry会话中设置自己的信号处理程序,例如:

Signal.trap('SIGINT') { puts 'Trapped' }

但这可能会对其他可能存在的处理程序造成严重破坏。

如果从命令行直接运行Pry,可以通过按下Control+C来停止长时间运行的命令并返回到REPL。但是,如果在另一个进程的binding.pry中运行,则无法通过这种方式停止命令。在这种情况下,可以在Pry会话中设置自己的信号处理程序,但这可能会与其他处理程序发生冲突。

0