node.js - 在 Node.js 中检测 CTRL+C

标签 node.js event-handling copy-paste

我从另一个 SO question 中得到了这段代码,但是 node 提示使用 process.stdin.setRawMode 而不是 tty,所以我改变了它。

之前:

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();
  }
});

无论如何,它只是创建了一个完全无响应的 Node 进程,它什么都不做,第一个提示 tty,然后抛出一个错误,第二个什么都不做并禁用 Node 的原生 CTRL+C 处理程序,所以当我按下它时它甚至不会退出 Node 。如何在Windows中成功处理Ctrl+C

最佳答案

如果您试图捕捉中断信号 SIGINT,则无需从键盘读取。 nodejsprocess 对象暴露了一个中断事件:

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

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

编辑:在没有解决方法的情况下无法在 Windows 上运行。 See here

关于node.js - 在 Node.js 中检测 CTRL+C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165605/

相关文章:

c# - append 订阅者方法中收到的字符串?

java - Java读写文件和添加行号

python - 使用 win32com 进行复制粘贴时出错(Glade GTK Python)

java - Shift + 右箭头不使用机器人类选择文本,但几天前它曾经工作得很好

javascript - JS - 如何使用链式 promise 结束数据库连接

javascript - 在数组上调用 forEach 时出错

jquery tabs 绑定(bind) tabsselect 或 tabsshow 未触发

node.js - GraphQL 中 `schema` typedef 有什么用?

node.js - Microsoft bot 未从 Firebase 云功能做出响应

javascript - 单击时删除 event.preventDefault 不起作用