当我在命令行中使用 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
。这里要采取的步骤:
- 打开MSYS2终端。
编辑
/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
授权签名密钥(可能偶尔重复此步骤,直到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
然后同步新存储库
pacboy update
这会更新
msys2-runtime
,因此会要求您关闭窗口(不是只是退出PACMAN进程(。不要惊慌,只需关闭当前所有打开的MSYS2壳和MSYS2程序即可。全部关闭后,再次启动一个新的终端。然后同步再次(更新软件包的非核心部分(:
pacboy update
,最后安装git/curl软件包:
pacboy sync git:x git-doc-html:x git-doc-man:x git-extra: curl:x
最后,通过在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 start
0之后杀死它;在cmd
上使用taskkill /im node.exe
,但找不到过程。
在GitHub上查看此问题,并搜索文件msys-2.0.dll
的名称以更快地到达评论。
有时节点过程挂起。 使用ps
检查过程ID,您可能需要GREP进行节点,然后使用kill -9 [PID]
我在Windows Machine上使用Git Bash并拥有在上个月左右遇到这个问题。
我仍然不知道是什么原因引起的,但是我找到了另一种阻止它的方法。
- 打开任务管理器
- 进入进程 TAB
- 寻找 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