我想从lua脚本
同时执行后台进程喜欢:
a = io.popen("deploy.exp" .. ip1):read("*a")
b = io.popen("deploy.exp" .. ip2):read("*a")
其中a,b持续运行进程。当我按上述方式执行此操作时,b仅在a完成时运行。 deploy.exp脚本是一个期望脚本,用于ssh几个服务器,并执行一些命令。然后我需要从a和b中获取一些文本。有什么想法吗?我尝试使用ExtensionProposal API。当我尝试时,我收到一条错误消息:“ * 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
有没有人有这方面的经验(或建议/我们应该在哪里看)?或者给我一个样品?感谢
BTW:我试过了luaposix,但我找不到posix.fork()的任何样本。有人可以分享吗? TKS
答案 0 :(得分:3)
posix.fork()是luaposix library的一部分,可以通过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
答案 1 :(得分:1)