well...

I'm not very experienced in this kind of things but i'm in a mood to
learn...

i tried your code multi-threaded and it DOES work (at least without errors
or exceptions)...

the thing is - your code features several calls to the OS - the echo and the
ping commands

ruby threads are (i think) ruby-internal so if ruby does a call to the OS,
ruby can't act (let another thread do it's work) until it gets control back
from the OS. so your original code really was multithreaded but it seemed
linear for ruby threads are not really threads to the OS....
quote from the rubybook of the pragmaticprogrammers on this matter:
> And if some thread happens to make
> a call to the operating system that takes
> a long time to complete, all threads will
> hang until the interpreter gets control back.

i modified your code (replaced the OS-calls) - and it IS multithreaded as
you will see when you try it.

the client.rb is the same as yours, also the exit.rb

------
#server.rb
require 'drb'
require 'timeout'

STDOUT.sync = true

class TstSrvr
    def initialize
        @work_threads = []
    end

    def time_now
        "It is:  " + Time.now.to_s
    end

    def work_request(owner = "", work_id = 0)
  return "Sorry, owner cannot be empty string" if owner == ""
       return "Sorry #{owner}, invalid work_id" if work_id < 1
        ret  = "Working on [" + work_id.to_s + "] from " + owner
        t = Thread.new {
         100.times { |i|
              puts(work_id.to_s+": "+i.to_s)
              sleep(0.1)
         }
      }
        @work_threads = @work_threads << t
 ret
    end

    def check_work(owner = "", work_id = 0)

    # Stub for checking if the work is over

    end

    def bye(msg="")
       puts msg

       p @work_threads
       @work_threads.each { |t| t.join }

       Thread.new {sleep(0.1); exit(1)}
       nil
    end
end

srvObj = TstSrvr.new

begin

        DRb.start_service("druby://localhost:5555",srvObj)
        DRb.thread.join

rescue RuntimeError
    puts 'Got runtime error: '
    puts $!
    DRb.stop_service
    retry
end
----- end of code -------

regards, patrick
---
using ruby 1.6.8 (pragmaticprogrammer installer 168-8) on winXPpro