Node.jsでCTRL + Cを検出する


87

このコードは別のSOの質問から取得しましたが、ノードがttyの代わりにprocess.stdin.setRawModeを使用するように文句を言ったので、変更しました。

前:

var tty = require("tty");

process.openStdin().on("keypress", function(chunk, key) {
  if(key && key.name === "c" && key.ctrl) {
    console.log("bye bye");
    process.exit();
  }
});

tty.setRawMode(true);

後:

process.stdin.setRawMode(true);
process.stdin.on("keypress", function(chunk, key) {
  if(key && key.name === "c" && key.ctrl) {
    console.log("bye bye");
    process.exit();
  }
});

いずれにせよ、それはまったく応答しないノードプロセスを作成するだけで、最初は不平を言ってttyからエラーをスローし、2番目は何もせずにノードのネイティブCTRL+Cハンドラーを無効にするだけなので、私がノードを終了することさえありませんそれを押してください。どのように私は正常に処理することができますCtrl+をCWindowsの

回答:


168

割り込み信号をキャッチしようとしている場合SIGINTは、キーボードから読み取る必要はありません。のprocessオブジェクトはnodejs、割り込みイベントを公開します。

process.on('SIGINT', function() {
    console.log("Caught interrupt signal");

    if (i_should_exit)
        process.exit();
});

編集:回避策がないとWindowsでは機能しません。こちらをご覧ください


3
そうでないことを除いて。少なくとも窓にはありません。
user3025492 2013年

1
すでに修正されているようです... 2012年。github.com/ joyent / node / issues / 1553
Mason Wan

11
将来の読者のために、この質問はここのウィンドウで答えられます:stackoverflow.com/a/14861513/2020425
Griffork 2014

6

機能が必要な人のために、私はを見つけました(npm nodule、hah!)

著者はまたそれが窓で働くと主張します:

POSIX互換システムでのみテストされています。これはWindowsシグナルに関する素晴らしい議論です、どうやら、これは修正/マッピングされています。

CTRL+ Cwin32で動作することを確認できます(はい、驚いています)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.