我有一个名为test.sh的shell脚本。我怎样才能从Ruby中触发test.sh?如何在Ruby中触发shell脚本并在后台运行(异步)?
我想test.sh作为后台进程运行,在Ruby中它是一个ansync调用。
STDERR和STDOUT也需要写入特定文件。
任何想法?
我有一个名为test.sh的shell脚本。我怎样才能从Ruby中触发test.sh?如何在Ruby中触发shell脚本并在后台运行(异步)?
我想test.sh作为后台进程运行,在Ruby中它是一个ansync调用。
STDERR和STDOUT也需要写入特定文件。
任何想法?
@ 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)
试试这个:
Process.fork { system "./test.sh" }
将无法在Windows中,您可以使用线程工作。
尼斯,也能在窗口!有多个进程写入test.out一些行会出现乱码 – peter 2012-08-16 12:26:20
@peter是的,对多个进程同时进行缓冲写入同一文件确实会造成一些线路。这个问题有很多解决方案,但最简单的方法就是写入每个进程的单独文件。否则,你可能需要一个单独的进程来复用输出。 – 2012-08-16 13:18:15