I recently asked about daemonizing a process in ruby and, in brief, I
was told to close I/O handles and use fork and Process.setsid. [It was
only a surprise that in Ruby 1.8 I have to do this by hand rather than
use a library.] While all seemed to work absolutely fine with a few
toy examples, I’ve run into a difficulty when I try to wrap my existing
process (which works just fine running in a single process without
fork.)
Whenever I do “processing” after fork I get the following error
message… it seems to relate to thread management in the net/imap
implementation in the standard library. I make no explicit use of
threads in myprog.rb:
–
/usr/lib/ruby/1.8/monitor.rb:98:in stop': stopping only thread (ThreadError) note: use sleep to stop forever from /usr/lib/ruby/1.8/monitor.rb:98:in
wait’
from /usr/lib/ruby/1.8/net/imap.rb:966:in get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in
send_command’
from /usr/lib/ruby/1.8/monitor.rb:229:in synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in
send_command’
from /usr/lib/ruby/1.8/net/imap.rb:1140:in search_internal' from /usr/lib/ruby/1.8/monitor.rb:229:in
synchronize’
from /usr/lib/ruby/1.8/net/imap.rb:1136:in search_internal' from /usr/lib/ruby/1.8/net/imap.rb:675:in
search’
from ./myprog.rb:57:in `process’
from ./myprog.rb:93
from ./myprog.rb:88
Should I have expected this? What would be the best way to address the
problem? I don’t see why having used fork should have affected
threading. Can anyone explain?