Thank you very much! That explains it.

Kent

On 3/14/07, Urabe Shyouhei <shyouhei / ruby-lang.org> wrote:
> It's a very difficult problem that can hardly be solved.
>
> Ruby creates a pthread-level thread when you create a Ruby-level thread
> (to catch signals from outer-process things), but what do you think is
> the right process for a pthread-level thread being killed when some
> other thread of the same process ID calls any execve()-family functions?
>
> Your pthread thread may perhaps is waiting for a mutex, or is reading
> from a socket, or needs special cleanups.  You cannot simply
> pthread_kill() that thread as that thread can set pthread_sigmask() to
> ignore all signals.  You cannot even pthread_cancel() that thread, as
> that thread is not always in a cancellation point.
>
> Mac OS X's approach for this is simple: they won't allow it.  Just
> throws ENOTSUPP and won't execute any new image.  It's quite
> reasonable.  There's handful of problems to do so as I wrote above.
> Linux takes a different approach that they silently scribble out all the
> threads with the new image being execve()-ed, but I don't think this is
> a right way...
>
> Kent Sibilev wrote:
> > Does anyone know how to explain this:
> >
> > $ irb
> >>> exec 'date'
> > Wed Mar 14 01:38:11 EDT 2007
> > $ irb
> >>> Thread.new {}
> > => #<Thread:0x3546e8 dead>
> >>> exec 'date'
> > Errno::EOPNOTSUPP: Operation not supported - date
> >        from (irb):2:in `exec'
> >        from (irb):2
> >        from :0
> >>>
> >
> > I couldn't reproduce it on Linux though.
> >
>
>
>