Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

after_fork_parent method waits for all child processes to stop

未关闭
#1,099 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
45/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
ruby
领域
devtools

调研方向

Start at lib/debug/local.rb lines 106-107 and inspect after_fork_parent, then reproduce the behavior with the Gemfile and test_daemon.rb example using daemons. Confirm the forked worker behavior from the issue's ps output; done means child processes other than debug no longer remain blocked waiting to stop.

由索引模型根据 Issue 内容生成。

描述

Your environment

  • ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
  • rdbg -v: rdbg 1.9.2

Describe the bug

I'm using delayed_job.
When I tried to increase the number of workers, the number of workers did not increase because the child process did not stop.

The problem was due to Process.waitpid below.

https://github.com/ruby/debug/blob/master/lib/debug/local.rb#L106-L107

To Reproduce

delayed_job uses daemons.

Script:

Gemfile

# frozen_string_literal: true

source "https://rubygems.org"

gem "debug", platforms: %i[ mri windows ]
gem "daemons"

test_daemon.rb

#!/usr/bin/env ruby

require 'bundler/setup'
Bundler.setup
require 'debug'
require 'daemons'

2.times do |i|
  Daemons.run_proc("test_daemon.#{i}") do
    loop do
    end
  end
end

Terminal:

$ test_daemon.rb start

Child processes do not stop and workers do not increase.

$ ps aux
--snip--
sada     14719  1.8  0.2 177232 37168 pts/6    Sl+  17:01   0:00 ruby ./test_daemon.rb start
sada     14735  0.0  0.2 177232 33832 ?        Ssl  17:01   0:00 ruby ./test_daemon.rb start
sada     14737 94.6  0.2 180308 37540 ?        Rl   17:01   0:08 test_daemon.0

The following fork operations are no longer possible.

  1. Forks another child process and exits first child. This prevents the potential of acquiring a controlling terminal.

https://github.com/thuehlinger/daemons/blob/a0e84bcebe8b872ff59e1e0aa10e1f1718a933b1/lib/daemons.rb#L43-L51

Also, in Rails development, debug is loaded by default, When starting delayed_job, unexpected block is caused by this issue.

https://github.com/rails/rails/blob/5e0c7388a378f4beb5368217a8f57f3c1bfbfabe/railties/lib/rails/generators/rails/app/templates/Gemfile.tt#L36

Expected behavior

Child processes other than debug do not wait to stop.

主要语言
Ruby
星标
1.3k
派生
146
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

ruby/debug 的其他 Issue

查看 ruby/debug 的全部 Issue

相似的 Issue

更多 Ruby Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。