如何在Ruby中触发shell脚本并在后台运行(异步)?

Kit*_* Ho 14 ruby

我有一个名为test.sh的shell脚本.如何从Ruby触发test.sh?

我希望test.sh作为后台进程运行,这意味着在Ruby中它是一个ansync调用.

还需要将STDERR和STDOUT写入特定文件.

有任何想法吗?

Dar*_*tle 29

@ TanzeebKhalili的答案有效,但您可能会考虑Kernel.spawn(),它不会等待进程返回:

pid = spawn("./test.sh")
Process.detach(pid)
Run Code Online (Sandbox Code Playgroud)

需要注意的是,根据该文件,不管你使用spawn()手动或fork()system(),你应该抓住的PID,要么Process.detach()Process.wait()退出之前.

关于重定向标准错误和输出,这很容易spawn():

pid = spawn("./test.sh", :out => "test.out", :err => "test.err")
Process.detach(pid)
Run Code Online (Sandbox Code Playgroud)


Tan*_*ili 9

试试这个:

Process.fork { system "./test.sh" }
Run Code Online (Sandbox Code Playgroud)

不适用于Windows,您可以使用线程.