So when the child is forked, only the parent thread is copied over and the "printer" thread has been killed in the child. Hence, you get the "false" response for the status. And I'll stop being pedantic now
Blessings,
TwP
···
On Jan 20, 2009, at 8:55 AM, James Gray wrote:
Am I understanding this example right:
#!/usr/bin/env ruby -wKU
printer = Thread.new do
10.times do
sleep 1
puts "Thread running in #{Process.pid}..."
end
end
fork do
p [Process.pid, printer.status]
printer.join
end
p [Process.pid, printer.status]
printer.join
# >> [457, "sleep"]
# >> [458, false]
# >> Thread running in 457...
__END__
Are all other threads stopped as part of a process fork?
printer = Thread.new do
10.times do
sleep 1
puts "Thread running in #{Process.pid}..."
end
end
fork do
p [Process.pid, printer.status]
printer.join
end
Are all other threads stopped as part of a process fork?
fork doesn’t copy other threads.
Man, I swear I've read that documentation 400 times now and just keep
missing that.
A soothing fact that even the well-experienced Ruby programmer
sometimes detects new aspects.
I think the amazing strike is that the variable containing the
Thread instance still exists whilst the Thread will surely be
dead. Joining a dead thread does just nothing. I reduced it to
these two lines:
t = Thread.new do sleep 100 end
fork do puts t.inspect end
Output:
#<Thread:0x28456bcc dead>
Bertram
···
Am Mittwoch, 21. Jan 2009, 04:48:14 +0900 schrieb James Gray: