You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RubyGems启动初期捕获SIGINT信号?

问题描述

我有一个bash脚本会创建大量Ruby子进程,当按下Ctrl-C时,这些子进程几乎总会输出与我的代码无关的回溯信息。

复现命令

可以通过以下单行命令复现该问题:

while true; do ruby -e 'trap("INT") { exit 11 }'; echo $?; done

复现输出

执行命令后快速按下3次Ctrl-C,输出如下:

0
0
^C<internal:dir>:412:in `glob': Interrupt
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/util.rb:104:in `glob_files_in_dir'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:776:in `block in each_gemspec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:775:in `each'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:775:in `each_gemspec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:787:in `each_spec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:841:in `load_defaults'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1374:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'
1
0
0
^C/home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1219:in `sub': Interrupt
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1219:in `block in register_default_spec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1210:in `each'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1210:in `register_default_spec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:844:in `block in load_defaults'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:789:in `block in each_spec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:777:in `block (2 levels) in each_gemspec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:776:in `each'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:776:in `block in each_gemspec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:775:in `each'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:775:in `each_gemspec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:787:in `each_spec'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems/specification.rb:841:in `load_defaults'
        from /home/alex/.rvm/rubies/ruby-3.3.4/lib/ruby/3.3.0/rubygems.rb:1374:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'
1
0
^C

内容的提问来源于stack exchange,提问作者Alexander Gromnitsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:47:37