我想从lua脚本中同时执行多个进程,例如
os.execute("cmd1")
os.execute("cmd2")
os.execute("cmd3")
其中cmd1,2和3持续运行进程。当我按上述方式执行此操作时,cmd2和3仅在cmd1完成时运行。有什么想法吗?我应该使用“fork”或类似的东西吗?
提前致谢
答案 0 :(得分:5)
你有几个问题的解决方案:
答案 1 :(得分:3)
(主要是从 Call popen with environment 复制的答案)
ExtensionProposal API中有os.spawn
个功能。
您可以按如下方式使用它:
require"ex"
local proc, err = os.spawn{
command = e.."/bin/aprogr",
args = {
"arg1",
"arg2",
-- etc
},
env = {
A = 100, -- I assume it tostrings the value
B = "Hi",
C = "Test",
},
-- you can also specify stdin, stdout, and stderr
-- see the proposal page for more info
}
if not proc then
error("Failed to aprogrinate! "..tostring(err))
end
-- if you want to wait for the process to finish:
local exitcode = proc:wait()
lua-ex-pai提供了POSIX和Windows的实现。 它允许产生多个并发进程。
您可以找到与LuaForWindows发行版捆绑在一起的此实施的预编译二进制文件。
以下是您的用例的更简洁版本:
require"ex"
local cmd1_out = io.pipe()
local cmd1_proc = assert(os.spawn("cmd", {
stdout = cmd1_out,
}))
local cmd2_out = io.pipe()
local cmd2_proc = assert(os.spawn("cmd", {
stdout = cmd1_out,
}))
-- perform actions with cmd1 and cmd2
答案 2 :(得分:2)
那是因为Lua是单线程的。要同时运行它,你需要为Lua提供一个多线程解决方案(不是协同程序,因为它们是微线程!),如lua pthreads。
答案 3 :(得分:2)
尝试简单地添加&在命令的最后:
os.execute("cmd1 &")
os.execute("cmd2 &")
os.execute("cmd3 &")
这应该适用于操作系统。在Windows上可能会有相同的方法,但我不知道它是什么。