我想要從一個lua腳本併發地執行多個進程,例如,Lua多個併發進程
os.execute("cmd1")
os.execute("cmd2")
os.execute("cmd3")
其中cmd1,2和3是連續運行的過程。當我這樣做時,cmd2和3只會在cmd1完成時運行。對此有何想法?我應該使用「叉子」還是等同的東西?
在此先感謝
我想要從一個lua腳本併發地執行多個進程,例如,Lua多個併發進程
os.execute("cmd1")
os.execute("cmd2")
os.execute("cmd3")
其中cmd1,2和3是連續運行的過程。當我這樣做時,cmd2和3只會在cmd1完成時運行。對此有何想法?我應該使用「叉子」還是等同的東西?
在此先感謝
(回答大多來自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
這是因爲Lua是單線程。要同時運行它,你需要爲Lua提供一個多線程解決方案(不是協同程序,因爲它們是微線程!),如lua pthreads。
嘗試只需在命令的末尾添加&:
os.execute("cmd1 &")
os.execute("cmd2 &")
os.execute("cmd3 &")
這應該一個操作的系統上運行。在窗戶上可能會有一種方法,但我不知道它是什麼。
似乎也適用於Windows(7至少) – jpjacobs 2012-02-28 13:46:33