如何在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
相关产品推荐
相关产品推荐

