我有一个类似于这里描述的问题: 防止fork()复制套接字
基本上,在我的Lua脚本中,我正在生成另一个脚本:
问题是我的Lua脚本打开一个TCP套接字来侦听特定端口并在它退出之后,尽管显然server:close()孩子(或更具体地说是它的孩子)保持套接字并保持端口打开(处于LISTEN状态)阻止我脚本再次运行.
这是演示问题的示例代码:
require('socket')
print('listening')
s = socket.bind("*", 9999)
s:settimeout(1)
while true do
print('accepting connection')
local c = s:accept()
if c then
c:settimeout(1)
local rec = c:receive()
print('received ' .. rec)
c:close()
if rec == "quit" then break end
if rec == "exec" then
print('running ping in background')
os.execute('sleep 10s &')
break
end
end
end
print('closing server')
s:close()
Run Code Online (Sandbox Code Playgroud)
如果我运行上面的脚本并且echo quit | nc localhost 9999一切正常 - 程序退出并关闭端口.
但是,如果我执行echo exec …