I think, your script is missing Thread::join:

> domains =3D ['www.bim.com','www.bum.com','www.bam.com']
> ..
> def check (host,domain,timeout)
> =A0 puts "checking... #{host} -> #{domain}"
> =A0 timeout(timeout) do
> =A0 =A0begin
> =A0 =A0 `/usr/bin/nslookup #{domain} #{host}`
> =A0 =A0rescue Timeout::Error
> =A0 =A0end
> =A0 end
> end
>
> iplist.each { |host|
> =A0threads << Thread.new(host) { |host|
> =A0 domains.each do |domain|
> =A0 =A0check(host,domain,timeout)
> =A0 end
> =A0}}
>

threads.each {|th|
  th.join
}

(Not tested.)

-Axel