何ルビーが出ている間にロックすることがありますか?
質問
私は、単に終了(スクリプトAPIを介して)いくつかのPERFORCEの操作を行いRubyスクリプトを持っています:
def foo()
...
end
def bar()
...
end
foo()
bar()
puts __LINE__
exit 0
#end of file
...との LINE の中の出口は(0)があるかどうか、プロセスが終了することはありません、プリントアウトされます。これは主にMac上で、ルビー1.8.6ですが、私は同様にPC上でこれを見ている。
私はチャンスをうかがっ通常のグーグルをやってますが、上の銀行にここに経験の声があるかもしれません期待しています。おかげます。
解決
私はすべてのPERFORCEに慣れていないんだけど、犯人は<のhref =「http://ruby-doc.org/core/classes/Kernel.html#M005932」のrel =「nofollowをnoreferrer」であるかもしれません何らかの理由でループに陥っています> at_exit
の方法。例えば、irb
を使用しての行動を観察します:
$ irb
irb(main):001:0> require 'time'
=> true
irb(main):002:0> at_exit { puts Time.now; sleep 10; puts Time.now }
=> #<Proc:0xb7656f64@(irb):2>
irb(main):003:0> exit
Fri Mar 12 19:46:25 -0500 2010
Fri Mar 12 19:46:35 -0500 2010
at_exit
機能は、プロセスがハングアップする原因となっているかどうかを確認するには、at_exit
にフックしてみてください。 #{caller}
がat_exit
と呼ばれる人のスタックトレースが表示されることに注意してください:
def at_exit &block
@at_exit_counter ||= 0
puts "at_exit #{@at_exit_counter} called"
s = "Calling at_exit ##{@at_exit_counter} from #{caller}"
super { puts s; block.call() }
@at_exit_counter += 1
end
at_exit { puts "I'll never return"; sleep 1 while true; }
at_exit { puts 'I am about to leave.' }
def do_cleanup
puts "Cleaning..."
at_exit { puts 'Cleaning up before exit...' }
end
do_cleanup
出力する
at_exit 0 called at_exit 1 called Cleaning... at_exit 2 called Calling at_exit #2 from exitcheck.rb:14:in `do_cleanup'exitcheck.rb:18 Cleaning up before exit... Calling at_exit #1 from exitcheck.rb:10 I am about to leave. Calling at_exit #0 from exitcheck.rb:9 I'll never return
、決して返します。
所属していません StackOverflow