複数のプロセスを同時に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 pthreadsのように、Lua用のマルチスレッドソリューションを提供する必要があります(コルーチンではないため、マイクロスレッドなので!)。
あなたは、あなたの問題にいくつかのソリューションを持っている:
&
を使用する場合があります。たとえば:os.execute('(sleep 10&& echo bar) & echo foo')
posix.fork()
機能os.execute("cmd1 &")
os.execute("cmd2 &")
os.execute("cmd3 &")
これは、手術システムで動作するはずです:
は、単にあなたのコマンドの末尾に&を追加してみてください。窓には同じものへの道があるかもしれないが、私はそれが何であるか分からない。
は、それはまた、(少なくとも7)Windows上で動作するようです – jpjacobs