Какая разница между Process.fork и новыми методами Process.spawn в Ruby 1.9.2 и какой из них лучше запускать другую программу в подпроцессе? Насколько я понимаю, Process.fork принимает блок кода и Process.spawn принимает системную команду плюс некоторые другие параметры. Когда я должен использовать один вместо другого?
Какая разница между Process.fork и Process.spawn в Ruby 1.9.2
Ответ 1
Какая разница между Process.fork и новыми методами Process.spawn в Ruby 1.9.2
Process.fork
позволяет запускать код ruby в другом процессе. Process.spawn
позволяет запускать другую программу в другом процессе. В принципе Process.spawn
похож на использование Process.fork
, а затем вызывает exec
в разветвленном процессе, за исключением того, что он дает вам больше параметров.
и какой из них лучше запустить другую программу в подпроцессе?
Если вам нужна обратная совместимость, используйте fork
+ exec
, поскольку spawn
недоступен в 1.8. В противном случае используйте spawn
, так как запуск другой программы в подпроцессе - это именно то, что сделано для spawn
.
Насколько я понимаю, Process.fork принимает блок кода и Process.spawn принимает системную команду плюс некоторые другие параметры.
Совершенно верно.
Когда я должен использовать один вместо другого?
Используйте fork
, если вам нужно запустить произвольный код ruby в отдельном процессе (вы не можете сделать это с помощью spawn
). Используйте spawn
, если вам нужно вызвать приложение в подпроцессе.
Ответ 2
Я считаю, что Process.Fork разворачивает текущий процесс, а Process.Spawn запускает новый процесс. Они совершенно разные. Вам нужен новый поток или новый процесс?