Как запустить оболочку script и запустить в фоновом режиме (async) в Ruby?

У меня есть оболочка script с именем test.sh. Как я могу вызвать test.sh из Ruby?

Я хочу, чтобы test.sh выполнялся как фоновый процесс, что означает, что в Ruby это вызов ansync.

STDERR и STDOUT также должны быть записаны в определенный файл.

Любые идеи?

Ответ 1

Ответ @TanzeebKhalili работает, но вы могли бы рассмотреть Kernel.spawn(), который не ожидает возврата процесса:

pid = spawn("./test.sh")
Process.detach(pid)

Обратите внимание, что в соответствии с документацией, независимо от того, используете ли вы spawn() или вручную fork() и system(), вы должны получить PID и либо Process.detach(), либо Process.wait() перед выходом.

Что касается перенаправления стандартной ошибки и вывода, это легко с spawn():

pid = spawn("./test.sh", :out => "test.out", :err => "test.err")
Process.detach(pid)

Ответ 2

Попробуйте следующее:

Process.fork { system "./test.sh" }

Не будет работать с окнами, для которых вы можете использовать потоки.