除非使用tskill,否则节点进程不会退出

时间:2017-10-08 21:08:02

标签: node.js windows bash express

这很奇怪。

作为参考,我在Win 10上使用MinTTY Git Bash。此外,我的节点是版本v6.11.3,我的npm是版本3.10.10。另外,"express": "^4.16.1"

我从未遇到过快速服务器突然没有关闭的问题。我已经使用了一段时间,直到今天我才开始讨论这个问题。

我正常ctrl+c关闭服务器并执行npm start如果我做了任何更改。完成后,我收到EADDRINUSE错误。我用Google搜索并用Google搜索,最后确定我可以杀死它的唯一方法是使用tskill <pid>

我尝试了taskkillps,基本上我可以在Git Bash上使用其他所有解决方案。 tskill是唯一有效的,并且使用netstat -a -o -n查看流程列表及其PID。

在对错误处理和信号进行一些研究后,我确定应添加process.on('SIG<whatever>', system.exit(0));行以允许进程完全退出。

我已尝试SIGINTSIGQUITSIGKILLSIGUSR1SIGUSR2SIGSTOPSIGTSTP。所有这些都会自动关闭进程,成功授予,但没有我的输入,因此服务器永远不会运行。

这是我的基本应用程序:

const express = require('express');
const app = express();

var config = require('./config')(process.env.NODE_ENV);
var appPort = process.env.PORT || config.port;

app.listen(appPort, function () {
  console.log('UAction Test Server Running on Port ' + appPort + '!');
});

//process.on('SIGTSTP', console.log('Process Interrupted. Exiting...'), process.exit(0));

我真的不知道从哪里开始。让我知道您需要的任何信息。如果我尝试了某些内容并且它不起作用/确实有效,我会更新此主帖以供其他可能遇到此问题的人使用。

我想知道的是:a)如何阻止这种情况发生?或者如果没有,那么b)如何在我的应用程序中实现正确的关闭?

编辑:我尝试使用其他应用程序并执行相同的操作。

1 个答案:

答案 0 :(得分:0)

Here is the issue on Node (even though it ended up not being Node's fault).

问题最终是 MinTTY 。我不知道为什么,但在安装Git时使用CMD使其工作完美无瑕。以下是我遇到此问题的人的设置:

  • 仅使用Git Bash中的Git
  • 使用OpenSSL库
  • Checkout Windows风格,提交Unix风格的行结尾
  • 使用默认控制台窗口(CMD)

  • 启用文件系统缓存

  • 启用Git凭据管理器
  • 禁用符号链接

(我明天会将此标记为答案,愚蠢的StackOverflow)