Какая разница между Process.fork и Process.spawn в Ruby 1.9.2

Какая разница между Process.fork и новыми методами Process.spawn в Ruby 1.9.2 и какой из них лучше запускать другую программу в подпроцессе? Насколько я понимаю, Process.fork принимает блок кода и Process.spawn принимает системную команду плюс некоторые другие параметры. Когда я должен использовать один вместо другого?

Ответ 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 запускает новый процесс. Они совершенно разные. Вам нужен новый поток или новый процесс?