Lua 5.3 为什么lua不尊重我的信号

Lua 5.3 为什么lua不尊重我的信号,lua-5.3,Lua 5.3,我正在运行Lua代码。(附于下文)。代码运行良好,但当我尝试使用CTRL+C发送SIGINT时,它不尊重它 local ltn12=assert(需要('ltn12')) 本地cjson=assert(需要('cjson')) 本地http=assert(需要('socket.http')) --本地dbg=assert(需要('debugger')) --本地信号=需要(“posix.信号”) --signal.signal(signal.SIGINT,函数(signum) --io.writ

我正在运行Lua代码。(附于下文)。代码运行良好,但当我尝试使用
CTRL+C
发送SIGINT时,它不尊重它

local ltn12=assert(需要('ltn12'))
本地cjson=assert(需要('cjson'))
本地http=assert(需要('socket.http'))
--本地dbg=assert(需要('debugger'))
--本地信号=需要(“posix.信号”)
--signal.signal(signal.SIGINT,函数(signum)
--io.write(“\n”)
----将代码放在这里保存一些内容
--操作系统退出(128+符号)
--(完)
http.TIMEOUT=120
本地函数execute()
打印('--COMMANDER:开始…------------'))
执行('sleep 1')
本地常春藤http://localhost:3000/'
如果(常春藤url==nil),那么
打印('--COMMANDER:Error::ivy_url未设置------------)
执行()
结束
本地_heartbeat=0
本地最后\u时间戳=零
本地url=nil
尽管如此
--_heartbeat用于通知循环正在正确执行。
如果_heartbeat%3==0,则
_心跳=0
打印('--COMMANDER:Heartbeat…------------')
结束
_心跳=_心跳+1
本地响应={}
本地自=上次\u时间戳
最后时间戳=操作系统日期(“%Y-%m-%dT%H:%m:%S”)
如果(自==零),则
url=ivy\u url。。“/switch/sites”
其他的
url=ivy\u url。。“/switch/sites?自=”。。自从
结束
本地一个,代码,头,状态=http.request{
method=“GET”,
url=url,
headers={Authorization=“Basic”。.tostring(“令牌”)},
sink=ltn12.sink.table(响应)
}
如果(代码==200),则
响应\数据=cjson.decode(响应[1])
对于i,站点描述成对进行(响应数据['data'])
打印(站点描述)
结束
打印('--COMMANDER:已向Ivy发送API请求,以在'..tostring(自)'--'更新站点信息)
elseif(代码==400)然后
上次时间戳=自
响应\数据=cjson.decode(响应[1])
打印('--COMMANDER:ivy API响应中出现错误:'..tostring(响应数据['error'])..在'..os.date(“%Y-%m-%dT%H:%m:%S”)…'------------'))
其他的
上次时间戳=自
打印('--COMMANDER:ivy API响应中出现错误:'..tostring(代码)…'在'..os.date(“%Y-%m-%dT%H:%m:%S”)…'--')
结束
执行('sleep 10')
结束
结束
执行()
如何实现这一点,并确保Lua程序遵守CTRL+C

我试着使用posix.signal,但没有用

signal.signal(signal.SIGINT, function(signum)
  io.write("Interrupting => \n")
  -- put code to save some stuff here
  os.exit(0)
end)

posix.signal
通过在接收到信号时设置Lua挂钩来实现信号处理。Lua钩子将在下一次执行Lua指令时运行。您的程序使用LuaSocket,这是一个用C编写的Lua库。因此,如果在LuaSocket的C代码运行时收到信号,则信号处理代码将在返回后才会运行。为了使其按您希望的方式工作,必须对LuaSocket进行修改,以便在它被信号中断时执行虚拟的
lua_调用。这将触发Lua钩子运行。我开始谈论这件事