【问题标题】:Can't stop local node server with Ctrl + C (Mac)无法使用 Ctrl + C (Mac) 停止本地节点服务器
【发布时间】:2017-07-16 20:42:40
【问题描述】:

我在本地开发节点服务器时从未遇到过这个问题。它可能是在更新 xCode 后开始的。

我尝试了最简单的代码

var app = express();
var server = app.listen(process.env.PORT || '3000', '0.0.0.0', function() {
    console.log('App listening at http://%s:%s', server.address().address, server.address().port);
});

process.on('SIGINT', function() {
 console.log("Exiting...");
 process.exit();
});

但是当我尝试 Ctr+C 退出时无法观察到任何日志。

更新 当我尝试按住 3-4 秒时,它起作用了..很奇怪,因为不按住按 10-20 次不起作用

App listening at http://0.0.0.0:3000
cccccccccccccccccccccccccccccccccccccccccccccc^CExiting...

【问题讨论】:

  • 当然,这不是您脚本中唯一的代码...您应该发布一个最小的、可重现的示例。很有可能你有一些东西让事件循环太忙,节点无法处理按键。
  • 如果你不能阻止它,那么大概是别的什么东西困住了它。带有setTimeout() 调用以保持其停止打开的琐碎程序是否正确停止?
  • 我尝试只运行 express,但没有其他任何东西,仍然有同样的问题。几天前不是这样的。更新 XCode 可能引入了这个
  • Xcode 不应该影响你的终端。我认为您的终端设置因不相关的原因发生了更改。

标签: node.js macos terminal


【解决方案1】:

由于您使用的是 OSX,请输入 Ctrl+C 而不是 Cmd+C。

【讨论】:

  • 没有用,谢谢。 App listening at http://0.0.0.0:3000 ccccccccccc
  • 好点。 Control+C 是^C,这是中断。 Command-C 用于复制文本。
  • 您确定您的控制键工作正常吗?这是一个不常用的按钮。它也可以在系统偏好设置中重新映射。
  • 您能描述一下重新映射 Control 键的步骤吗?
  • 打开系统偏好设置,在键盘下选择“修改键”按钮。
【解决方案2】:

除了Pat Needham's answer,还要检查Apple Logo > System Preferences > Keyboard > Shortcuts。 如果您启用任何未选中的项目并输入ctrl+c,那么它将显示哪个也有ctrl+c。

【讨论】:

    【解决方案3】:

    对我来说,这是因为我的代码中有这一行:

    process.stdin.setRawMode(true);
    

    我的代码中有这个,所以我可以读取全局热键,但忘了我把它放在那里了。删除它或将原始模式设置为 false 允许 nodejs 再次正确捕获 sigint。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多