別の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番目は何もせずにNodeのネイティブを無効にします CTRL+C ハンドラーなので、私がそれを押してもノードを終了しません。どうすればうまく処理できますか Ctrl+C in Windows?
割り込み信号SIGINT
をキャッチしようとしている場合は、キーボードから読み取る必要はありません。 process
のnodejs
オブジェクトは、割り込みイベントを公開します。
process.on('SIGINT', function() {
console.log("Caught interrupt signal");
if (i_should_exit)
process.exit();
});
Edit:Windowsでは回避策なしでは機能しません。 こちらを参照
機能が必要な人のために、私は death(npm nodule、hah!) を見つけました。
作者もclaimsで動作します:
POSIX互換システムでのみテストされています。 Windowsシグナルに関する素晴らしい議論があります。明らかに、これは修正/マッピングされています。
確認できます CTRL+C win32で動作します(はい、驚いています)。