我想知道来自命令行的用户何时按下control-c,这样我就可以节省一些东西。
我该怎么做?我看过但却没有看到任何东西。
注意:我对lua有点熟悉,但我不是专家。我主要使用lua来使用库Torch(http://torch.ch/)
答案 0 :(得分:4)
使用优秀的SIGINT
库,实现luaposix处理程序非常简单:
local signal = require("posix.signal")
signal.signal(signal.SIGINT, function(signum)
io.write("\n")
-- put code to save some stuff here
os.exit(128 + signum)
end)
有关详细信息,请参阅posix.signal模块的API文档。
答案 1 :(得分:2)
windows : SetConsoleCtrlHandler
信号有两种不合需要的行为,会导致代码复杂化。
可以使用SetConsoleCtrlHandler / signal在C程序中捕获并记住第一个行为。这将允许调用您的函数,您可以记住系统需要关闭。然后在lua代码中的某个时刻,你会看到它已经发生(调用检查),然后执行你的整理和关闭。
第二种行为是信号取消阻塞操作(读/写),操作将完成。这需要在每个IO事件中进行检查,然后重新启动,或者在适当时取消。
答案 2 :(得分:2)
存在支持此功能的io库。 我知道zmq和libuv
利用lluv绑定的Libuv示例 - https://github.com/moteus/lua-lluv/blob/master/examples/sig.lua
当用户按下Ctrl-C
时,ZeroMQ从轮询功能返回EINTR但我不会自己处理
答案 3 :(得分:0)
require('sys')
sys.catch_ctrl_c()
我用它来赶上cli的退出。