как к контроллеру (запускают/уничтожают) фоновый процесс (приложение для сервера) в рубине

я пытаюсь настроить сервер для интеграционных тестов (спецификации на самом деле) через рубин и не могу выяснить, как управлять процессом.

таким образом то, что я пытаюсь сделать:

  1. выполните задачу граблей для моего драгоценного камня, который выполняет спецификации интеграции
  2. задача должна сначала запустить сервер (я использую webrick), и затем выполните спецификации
  3. после выполнения спецификаций это должно уничтожить webrick, таким образом, меня не оставляют с некоторым процессом используемого фона

webrick не является требованием, но он включен в рубиновую стандартную библиотеку, таким образом, способность использовать его была бы большой.

надежда любой в состоянии помочь!

PS я работаю на Linux, также - эта работа для окон, не является моим основным приоритетом (прямо сейчас).

9
задан rubiii 2 January 2010 в 22:18
поделиться

2 ответа

Стандартный способ - использовать системные функции fork (для дублирования текущего процесса), execute (для замены текущего процесса исполняемым файлом), kill (для отправки сигнала процессу о его завершении)

Например :

pid = fork do
  # this code is run in the child process
  # you can do anything here, like changing current directory or reopening STDOUT
  exec "/path/to/executable"
end

# this code is run in the parent process
# do your stuffs

# kill it (other signals than TERM may be used, depending on the program you want
# to kill. The signal KILL will always work but the process won't be allowed
# to cleanup anything)
Process.kill "TERM", pid

# you have to wait for its termination, otherwise it will become a zombie process
# (or you can use Process.detach)
Process.wait pid

Это должно работать на любой системе типа Unix. Windows создает процесс другим способом

.
13
ответ дан 4 December 2019 в 13:47
поделиться

Я пробовал вилку, но у нее есть своего рода проблемы, когда ActiveRecord участвует в обоих процессах. Я бы предложил плагин Spawn (http://github.com/tra/spawn). Он делает только вилку, но заботится о ActiveRecord.

.
0
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: