fork with Ruby 1.8 and Windows

最后都变了- 提交于 2019-12-08 05:06:49

问题


I'm using ruby 1.8.7 patchlevel 302 and I'm working on a Windows xp system. I have to start an external process that needs to react on user input. The process doesn't react if I use threads, so I tried using fork. With fork the external process reacts on the user input but it executes more than just the fork block. For example

fork do
  puts 'child'
end
puts 'parent'
Process.wait
puts 'done'

produces the following output on my machine:

parent
child
parent
done
done

As you can see 'done' and 'parent' is printed twice. What can I do to make the child execute only its block and not more? (I can't switch to Ruby 1.9 because of some gems)


回答1:


Like that:

if child = fork
  puts 'parent'
  Process.wait
  puts 'done'
else
  puts 'child'
end



回答2:


I found a little makeshift. It works like its supposed to be when I add Process.kill(1, 0) at the end of the child block. But I think it's not the best solution. So I'd still be happy if someone knows a real solution.




回答3:


I think you just need Process.exit! before you end your fork.

fork do
  puts 'child'
  Process.exit!
end
puts 'parent'
Process.wait
puts 'done'


来源:https://stackoverflow.com/questions/3853250/fork-with-ruby-1-8-and-windows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!