节点 JS ctrl + C 不停止服务器(用 "npm start" 启动服务器后)



当我在命令行中使用 node app.js启动服务器(使用git bash(时,我可以使用ctrl c。

停止它。

在我的软件包中。

"scripts": {
    "start": "node app"
},

当我这样做时,服务器按正常启动:

$ npm start
> nodekb@1.0.0 start C:Projectsnodekb
> node app.js
Server started on port 3000...

但是,当我现在ctrl c时,服务器不会停止(节点进程仍保留在任务管理器中(。这意味着当我尝试再次尝试npm start时,我会遇到错误,因为端口3000仍在使用。

我正在关注YouTube上的一个教程(带时间戳的视频(,当这个家伙Ctrl C然后再次运行npm start时,它正常工作。

有什么想法,为什么我使用CTRL C?

时不会停止我的服务器流程。

我的app.js文件(如果需要:

(
var express = require("express");
var path = require("path");
//Init app
var app = express();
//Load View Engine
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
//Home Route
app.get("/", function(req, res) {
  res.render("index", {
    title: "Hello"
  });
});
//Add route
app.get("/articles/add", function (req, res) {
  res.render("add_article", {
    title: "Add Article"
  });
});
//Start server
app.listen(3000, function() {
  console.log("Server started on port 3000...");
});

谢谢!

ctrl c不会杀死服务器。该问题的分辨率是在server.js中使用以下代码片段:

process.on('SIGINT', function() {
  console.log( "nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(0);
});

这对我有用。

您还可以检查Nodejs

的其他解决方案。看起来这是Git Bash的问题。

我在msys2中遇到了这个问题,即使在最新构建中(x64 2018-05-31(。

幸运的是,Windows的Git维护自定义的MSYS2运行时。它们的补丁尚未在上游发送,包括修复Sigint,Sigterm和Sigkill的仿真的补丁。

讨论:https://github.com/nodejs/node/issues/16103

我能够通过遵循这些说明来使我的" msys2正确"平台将git用于Windows的MSYS2运行时。

在此处重复以下后代:

安装在MSYS2中

本指南假定您需要Windows的64位版本。

git用于基于MSYS2的Windows,可以将git软件包安装到现有的MSYS2安装中。这意味着,如果您已经在计算机上使用MSYS2,则可以在不运行完整安装程序或使用便携式版本的情况下将git用于Windows。

但是,请注意,有一些警告。Windows的git为msys2-runtime创建了一些尚未在上游发送的补丁。(已经计划了这一点,但是在第284期中确定可能不会发生。(这意味着您必须为Windows自定义的msys2-runtime安装GIT,以在MSYS2中具有完全工作的git

这里要采取的步骤:

  1. 打开MSYS2终端。
  2. 编辑/etc/pacman.conf及其在[mingw32]之前(我的计算机上的第71行(,添加git-for-windows软件包存储库:

    [git-for-windows]
    Server = https://wingit.blob.core.windows.net/x86-64 
    

    以及对面架构的仅MINGW仅存储库(即64位SDK的Mingw32(:

    [git-for-windows-mingw32]
    Server = https://wingit.blob.core.windows.net/i686
    
  3. 授权签名密钥(可能偶尔重复此步骤,直到https://github.com/msys2/msys2/issues/62已修复(

    curl -L https://raw.githubusercontent.com/git-for-windows/build-extra/master/git-for-windows-keyring/git-for-windows.gpg |
    pacman-key --add - &&
    pacman-key --lsign-key 1A9F3986
    
  4. 然后同步新存储库

    pacboy update
    
  5. 这会更新msys2-runtime,因此会要求您关闭窗口(不是只是退出PACMAN进程(。不要惊慌,只需关闭当前所有打开的MSYS2壳和MSYS2程序即可。全部关闭后,再次启动一个新的终端。

  6. 然后同步再次(更新软件包的非核心部分(:

    pacboy update
    
  7. ,最后安装git/curl软件包:

    pacboy sync git:x git-doc-html:x git-doc-man:x git-extra: curl:x
    
  8. 最后,通过在mingw64 shell中进行git --version检查一切都很好,它应该输出诸如git version 2.14.1.windows.1(或更新(之类的东西。

注意:我发现步骤7安装的git-extra软件包非常有侵入性(它添加了一条消息"欢迎来到Windows SDK的Git!" 到每个终端您打开(,所以我用pacman -R git-extra将其删除。

注2:我还发现Windows的MSYS2运行时的Git在与MSYS2 Promer的另一个主目录中打开。这也意味着它在错误的bash配置文件中读取。我通过将环境变量添加到控制面板中的Windows:HOME=/C/msys64/home/myusername

使用ctrl 发送sigquit信号。它将关闭服务器。

参考 - https://en.wikipedia.org/wiki/signal_(ipc(

i与npm一起使用相同的问题。但是最后,我知道这是git本身的问题。

15天前Github上的 dscho 发表了评论。他说,他们正在努力在下一个版本中解决这个问题。他还分享了确切的msys-2.0.dll文件,该文件可以为迫不及待的人解决问题。

就我个人而言,我等不及了:p。因此,我尝试了一下,下载了文件,然后将其扔到git文件夹中。问题消失了!太棒了!

但是请务必在替换文件之前进行备份。

我还试图在运行npm start0之后杀死它;在cmd上使用taskkill /im node.exe,但找不到过程。

在GitHub上查看此问题,并搜索文件msys-2.0.dll的名称以更快地到达评论。

有时节点过程挂起。 使用ps检查过程ID,您可能需要GREP进行节点,然后使用kill -9 [PID]

我在Windows Machine上使用Git Bash并拥有在上个月左右遇到这个问题。

我仍然不知道是什么原因引起的,但是我找到了另一种阻止它的方法。

  1. 打开任务管理器
  2. 进入进程 TAB
  3. 寻找 node.exe ,然后按结束过程

这使我能够快速停止服务器。

我能够通过切换到nodemon运行服务器来解决此问题。

npm install --save-dev nodemon

package.json

"scripts": {
    "start": "nodemon app"
},

我试图让json-server退出自定义服务器脚本,但它总是在Windows上运行的子进程。这似乎是通过Windows上的npm运行express的特定问题。如果您直接通过c:>node server.js运行服务器,那么它似乎可以正确退出。

我能够通过使用TCP View检查端口来调试此问题,并意识到即使我按下Ctrl-C停止它,我的节点服务器即使正在运行。我建议杀死您完全从中运行节点的终端。

insex package.json在脚本下,我有此行react-scripts start&。请注意,它以&结束,该CC_31将将过程发送到背景,而ctrl+c将无法使用。以某种方式试图将其带到fg的前景也无效。通过删除 &

解决问题,如果您使用 node.js exec 扩展可从>运行您的项目F8 ,您还可以使用 f9 进行取消运行..

使用ctrl c,然后输入:> pm2停止P>

这将停止所有服务器,或者当您使用nodejs堆栈时。

这很可能只是您的控制台的问题命令该过程。这很常见,尤其是在使用CMDR/CONEMU等第三方游戏机时。

解决方案?

只是击中Ctrl C几次,直到关闭:P

相关内容

  • 没有找到相关文章

最新更新