вилка с Ruby 1.8 и Windows - PullRequest
       9

вилка с Ruby 1.8 и Windows

1 голос
/ 04 октября 2010

Я использую Ruby 1.8.7 patchlevel 302 и работаю в системе Windows XP.Я должен запустить внешний процесс, который должен реагировать на ввод пользователя.Процесс не реагирует, если я использую потоки, поэтому я попытался использовать fork.С помощью fork внешний процесс реагирует на пользовательский ввод, но он выполняет больше, чем просто блок fork.Например,

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

выдает на моем аппарате следующий вывод:

parent
child
parent
done
done

Как видно, «готово» и «родитель» напечатаны дважды.Что я могу сделать, чтобы ребенок выполнял только свой блок и не более?(Я не могу переключиться на Ruby 1.9 из-за некоторых драгоценных камней)

Ответы [ 3 ]

2 голосов
/ 01 июня 2011

Вот так:

if child = fork
  puts 'parent'
  Process.wait
  puts 'done'
else
  puts 'child'
end
0 голосов
/ 25 июля 2011

Я думаю, вам просто нужно Process.exit!, прежде чем вы закончите свою вилку.

fork do
  puts 'child'
  Process.exit!
end
puts 'parent'
Process.wait
puts 'done'
0 голосов
/ 04 октября 2010

Я нашел немного самодельный. Он работает так, как и положено, когда я добавляю Process.kill (1, 0) в конце дочернего блока. Но я думаю, что это не лучшее решение. Так что я все равно был бы счастлив, если бы кто-нибудь знал реальное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...