Создайте фоновый процесс в Ruby

Я пишу загрузочную загрузку ruby ​​ script для школьного проекта, и часть этого процесса начальной загрузки состоит в том, чтобы запустить несколько фоновых процессов (которые написаны и работают правильно). То, что я хотел бы сделать, это что-то вроде:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`

Однако этот блок блокирует первый вызов для выполнения daemon1. Я видел ссылки на метод Process.spawn, но это похоже на 1.9+, и я ограничен Ruby 1.8.

Я также попытался выполнить эти демоны из разных потоков, но мне бы хотелось, чтобы мой загрузочный файл script мог выйти.

Итак, как я могу запустить эти фоновые процессы, чтобы мой bootstrap script не блокировал и не мог выйти (но все еще есть демоны, работающие в фоновом режиме)?

Ответ 1

Пока вы работаете с ОС POSIX, вы можете использовать fork и exec.

fork= Создать подпроцесс

exec= Заменить текущий процесс другим процессом

Затем вам нужно сообщить, что ваш основной процесс не заинтересован в созданных подпроцессах через Process.detach.

job1 = fork do
  exec "/path/to/daemon01"
end

Process.detach(job1)

...

Ответ 2

Ну, технически говоря, вы можете, буквально:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`

Но это не будет делать то, что вы хотите, очевидно.

Однако вы также можете просто передать & в качестве аргумента system (и друзей), и он будет выполнять фоновое задание.

Ответ 3

лучший способ псевдодезонизации:

`((/path/to/deamon1 &)&)` 

отбросит процесс в свою собственную оболочку.

лучший способ фактически демонировать:

`service daemon1 start`

и убедитесь, что у сервера/пользователя есть разрешение на запуск фактического демона. запустите инструмент deamonize для linux, чтобы настроить ваш деамон.