当使用ruby调试gem时,我经常看到打印出以下输出:
DEBUGGER: Attaching after process <pid1> fork to child process <pid2>
其中<pid1>
是类似于12345的父进程id,而<pid2>
是新分叉的子进程id,类似于55555。
这是怎么回事?它与连接到Spring或Zeus等应用程序预加载程序有什么关系吗?
它来自以下代码:https://github.com/ruby/debug/blob/4af8c25140a7a672db852954b6a1733b3169b608/lib/debug/session.rb#L2129-L2162
实际情况是,您的主Ruby进程正在分叉一个新进程,它告诉您调试器正在附加到进程id为<pid2>
的新创建的子进程,因此它也可以中断以调试事件。
在我的案例中,这是在自动测试中调用visit <url>
时发生的,由于有一个Capybara Selenium网络驱动程序,该测试创建了一个新的子进程来启动Chrome进程以呈现请求的HTML。
默认情况下,ruby调试gem将同时连接到父进程和子进程。但是,您可以通过使用RUBY_DEBUG_FORK_MODE
环境变量来重写,以仅激活子级或父级的调试器。
需要明确的是,它与Spring或Zeus等应用程序预加载程序无关。