从命令行停止node.js程序

node.js Node.js

西门Harry

2020-03-19

我有一个侦听端口的简单TCP服务器。

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

我先将其启动node server.js,然后在Mac上使用Ctrl + Z将其关闭。当我尝试再次运行它时,出现node server.js以下错误消息:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

我是否以错误的方式关闭程序?如何防止这种情况发生?

第2206篇《从命令行停止node.js程序》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

11个回答
Green前端 2020.03.19

您可以按照以下命令工作,以特定于localserver kill(此处:8000)

http:// localhost:8000 /杀死PID(processId):

$:lsof -i tcp:8000

它将为您提供以下TCP组:

命令PID用户FD类型设备尺寸/关闭节点名称

节点21521 ubuntu 12u IPv6 345668 0t0 TCP *:8000(LISTEN)

$:kill -9 21521

它将杀死对应于TCP *:8000的processId

小卤蛋猪猪 2020.03.19

For windows first search the PID with your port number

netstat -ano | findStr "portNumber"

After that, kill the task, make sure you are in root of your "c" drive 在此处输入图片说明 And the command will be taskkill /F /PID your pid

达蒙西门十三 2020.03.19

对于MacOS

  1. 打开终端
  2. 运行以下代码,然后按Enter

     sudo kill $(sudo lsof -t -i:4200)
    
阳光西里小哥 2020.03.19

答案较晚,但在Windows上,使用CTRL + ALT + DEL打开任务管理器,然后杀死Node.js进程将解决此错误。

AL村村 2020.03.19

虽然这是一个较晚的答案,但我是从NodeJS docs找到的

通过接收.exit命令输入,用户按<ctrl>-C两次以发出SIGINT信号或通过按<ctrl>-D以发出信号“结束”信号而退出REPL时,退出REPL时将发出“退出”事件侦听器回调不带任何参数而被调用。

因此,总结一下,您可以退出:

  1. .exit在nodejs REPL中输入
  2. <ctrl>-C两次。
  3. <ctrl>-D
  4. process.exit(0)意味着从REPL自然退出。如果要返回任何其他状态,则可以返回非零数字。
  5. process.kill(process.pid) 是从您的代码或REPL中使用nodejs api杀死的方法。
Green小卤蛋 2020.03.19

我要添加这个答案,因为对于具有生产部署的许多项目,我们都有停止这些过程的脚本,因此我们不必这样做。

一种管理节点服务器进程的干净方法是使用forever软件包(来自NPM)。

例:

永久安装

npm install forever -g

运行节点服务器

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

结果:

info: Forever processing file: server.js

关闭节点服务器

forever stop server.js

结果

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247

这将彻底关闭您的服务器应用程序。

路易GO 2020.03.19

$ sudo killall node在另一个终端上可在mac上运行,而killall node无法运行:

$ killall node
No matching processes belonging to you were found
梅Harry 2020.03.19

要结束程序,您应该使用Ctrl+ C如果这样做,它会发送SIGINT,从而允许程序正常结束,并与正在侦听的任何端口解除绑定。

另请参阅:https : //superuser.com/a/262948/48624

Itachi神乐 2020.03.19

您可以键入.exit 以退出节点js REPL

Sam伽罗 2020.03.19

Ctrl+ Z挂起它,这意味着它仍然可以运行。

Ctrl+ C实际上会杀死它。

您也可以像这样手动将其杀死:

ps aux | grep node

找到进程ID(从左数第二个):

kill -9 PROCESS_ID

这可能也可以

killall node
A蛋蛋乐 2020.03.19

如果以交互方式(REPL)运行Node.js:

Ctrl+ C将带您回到>提示符,然后键入:

process.exit()

或只使用Ctrl+ D

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android