4

luaスクリプトからバックグラウンドプロセスを同時に実行したい

お気に入り :

a = io.popen("deploy.exp" .. ip1):read("*a")
b = io.popen("deploy.exp" .. ip2):read("*a")

ここで、a、bは継続的に実行されているプロセスです。上記のようにこれを行うと、bはaが終了したときにのみ実行されます。また、deploy.expスクリプトは、少数のサーバーをsshし、いくつかのコマンドを実行するために使用されるexpectスクリプトです。次に、aとbからテキストをフェッチする必要があります。これについて何か考えはありますか?ExtensionProposalAPIを試してみました。これを試してみると、次のようなエラーメッセージが1つ表示されます。" *glibcが検出されましたfree():無効な次のサイズ(高速):0x08aa2300**中止"。

部品コードは

for k,v in pairs(single) do
command =  k .. " 1 " ..  table.concat(v, " ")
local out = io.pipe()
local pro = assert(os.spawn("./spaw.exp " .. command,{
      stdout = out,  
}))
if not proc then error("Failed to aprogrinate! "..tostring(err)) end
print(string.rep("#", 50))
local exitcode = proc:wait()
end

誰かがこれについて何か経験(またはアドバイス/どこを見るべきか)がありますか?または私にサンプルをください?ありがとう

ところで:luaposixを試しましたが、posix.fork()でサンプルが見つかりません。誰かが共有できますか?TKS

4

2 に答える 2

3

posix.fork()はluaposixライブラリの一部であり、 luarocksを介してインストールできます。fork(3)とほとんど同じように機能します。親プロセスのコピーを作成し、両方ともfork()の呼び出し後にすべてを実行します。子プロセスでのfork()の戻り値は0です。それ以外の場合は、生成されたばかりの子のPIDです。不自然な例を次に示します。

local posix = require "posix"
local pid = posix.fork()

if pid == 0 then 
  -- this is the child process
  print(posix.getpid('pid') .. ": child process")

else 
  -- this is the parent process
  print(posix.getpid('pid') .. ": parent process")

  -- wait for the child process to finish
  posix.wait(pid) 

end

-- both processes get here
print(posix.getpid('pid') .. ": quitting")

これにより、次のように出力されます。

$ lua fork.lua 
27219: parent process
27220: child process
27220: quitting
27219: quitting
于 2012-11-07T19:14:09.530 に答える
1

Lua用のポータブルスレッドライブラリであるLuaLanes(またはここから)を試してみることをお勧めします。

于 2012-11-05T09:14:14.013 に答える