Создайте фоновый процесс в 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, чтобы настроить ваш деамон.