17

コマンド ラインからユーザーが control-c を押したときに知りたいので、いくつかのものを保存できます。

どうすればいいですか?私は見てきたが、実際には何も見ていない。

注: 私は lua にある程度精通していますが、専門家ではありません。私は主に lua を使用してライブラリ Torch ( http://torch.ch/ )を使用します。

4

4 に答える 4

7

優れたluaposixライブラリSIGINTを使用すると、ハンドラーを簡単に実装できます。

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 に答える
1

Windows : SetConsoleCtrlHandler

Linux:シグナル

信号には望ましくない 2 つの動作があり、コードが複雑になります。

  1. プログラムの終了
  2. 壊れた IO

最初の動作は、SetConsoleCtrlHandler/signal を使用して C プログラムでキャッチして記憶することができます。これにより、関数を呼び出すことができ、システムをシャットダウンする必要があることを思い出すことができます。次に、lua コードのある時点で、それが発生したことを確認し (呼び出して確認)、片付けとシャットダウンを実行します。

2 番目の動作は、ブロッキング操作 (読み取り/書き込み) がシグナルによってキャンセルされ、操作が未完了になることです。これは、各 IO イベントでチェックし、必要に応じて再起動またはキャンセルする必要があります。

于 2015-09-05T04:50:48.193 に答える