为什么lua不尊重我的SIGINT信号

时间:2018-05-24 09:45:17

标签: lua-5.3

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

https://gist.github.com/meetme2meat/fb8f65059d0e45d6a4e5453513b30373

如何实现这一点,并确保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)

1 个答案:

答案 0 :(得分:0)

posix.signal通过在接收到信号时设置Lua挂钩来实现信号处理。 Lua钩子将在下一次执行Lua指令时运行。您的程序使用LuaSocket,这是用C编写的Lua库。因此,如果在LuaSocket的C代码运行时信号进入,则直到信号处理代码返回后,您的信号处理代码才会运行。为了按照您想要的方式进行工作,必须修改LuaSocket以使其在被信号中断时执行伪lua_call。然后,这将触发您的Lua挂钩运行。我为此打开了https://github.com/diegonehab/luasocket/issues/319