17

我想知道用户何时从命令行按下 control-c,这样我就可以保存一些东西。

我该怎么做呢?我看过但还没有真正看到任何东西。

注意:我对 lua 有点熟悉,但我不是专家。我主要使用 lua 来使用 Torch 库(http://torch.ch/

4

4 回答 4

7

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 文档。

于 2015-12-22T05:52:06.407 回答
2

存在支持这一点的 io 库。我知道 zmq 和 libuv

带有 lluv 绑定的 Libuv 示例 - https://github.com/moteus/lua-lluv/blob/master/examples/sig.lua

当用户按下 Ctrl-C 时,ZeroMQ 从轮询函数返回 EINTR

但我不自己处理

于 2015-09-09T05:54:17.147 回答
1

窗口:SetConsoleCtrlHandler

linux:信号

信号有两种行为是不可取的,这将导致代码的复杂性。

  1. 程序终止
  2. IO损坏

通过使用 SetConsoleCtrlHandler/signal,可以在 C 程序中捕获并记住第一个行为。这将允许调用您的函数,并且您可以记住系统需要关闭。然后在 lua 代码中的某个时刻,您会看到它已经发生(调用检查),然后执行您的整理和关闭操作。

第二种行为,是阻塞操作(读/写)将被信号取消,操作将未完成。这需要在每个 IO 事件中进行检查,然后根据需要重新启动或取消。

于 2015-09-05T04:50:48.193 回答
-2
require('sys')
sys.catch_ctrl_c()

我用它来捕捉 cli 的退出。

于 2015-09-16T02:51:33.307 回答