如何杀死 node.js 上的打开进程?

Posted

技术标签:

【中文标题】如何杀死 node.js 上的打开进程?【英文标题】:How to kill an open process on node.js? 【发布时间】:2012-07-01 20:07:58 【问题描述】:

我正在尝试在 sublime 上为 Node.js 设置一个构建系统,所以我可以按 F7 在打开的文件上调用“节点”。问题是该进程将永远打开,因此,我第二次使用 F7 时,我得到了一个附加使用。

有没有办法可以从 node.js 中杀死打开的“node.exe”进程?

【问题讨论】:

stop all instances of node.js server的可能重复 【参考方案1】:

如果你想杀死所有进程而不是:

sudo killall -9 node

如果你想杀死选定端口上的进程:

sudo kill sudo lsof -t -i:3100 

那是端口3100

【讨论】:

【参考方案2】:

与@Alex W 所说的类似,只要您有进程 ID 或 PID,就可以使用以下节点函数向进程发送终止信号:

process.kill(pid, [signal])

在我的例子中,当我生成 child_process().spawn.pid 时,我可以随时使用 PID。我已经对其进行了测试,它确实可以在 Win 7 x64 上运行。

【讨论】:

【参考方案3】:

使用以下命令集来识别在给定端口上运行的进程并从命令行终止它

   sudo fuser -v 5000/tcp // gives you the process running on port 5000

它将输出类似于下图的详细信息

                        USER        PID ACCESS COMMAND
   5000/tcp:            almypal     20834 F.... node

然后使用

   sudo fuser -vk 5000/tcp

终止进程。再次检查使用

   sudo fuser -v 5000/tcp

确保进程已终止。

在 Windows 上,您可以使用以下步骤

  C:\> tasklist // will show the list of running process'

  Image Name        PID Session Name    Session#    Mem Usage
  System            4   console                 0   236 K
  ...
  node.exe         3592 console                0    8440 k

记下你的节点进程对应的PID,在本例中为3592。接下来运行taskkill终止进程。

  C:\> taskkill /F /PID 3592

或/IM切换

  C:\> taskkill /F /IM node.exe

【讨论】:

很好的答案,但是...对于 Windows? 好吧,只是注意到不完全是我要求的,但是可以从 node.js 使用命令,如果你稍微改变它们(从进程 ID 到进程名称),它会按照我的要求执行,所以这是我得到的最佳答案。 谢谢!这是在 cloud9 IDE 上运行以杀死 node.js 进程的唯一命令 对于windows来说要简单得多,只需打开任务管理器并按名称和end task node.js进程排序 Windows 中的 taskkill 需要管理员权限才能运行。我们如何在 npm 脚本中做到这一点??【参考方案4】:

如果你说的 sublime 是 sublimeText 插件,我也有同样的问题,然后从 python 代码向 TCP 服务器发送消息“关闭”,然后

app.js

 TCPserver
        .on('connection', function(socket)
        
            socket.pipe(require('through')
                (function(data)
                 //----------------------------
                    if (data.toString() === 'shutdown')
                    
                        process.exit();
                    
                    //--------------------------
                ));
            socket.end();
        )

【讨论】:

【参考方案5】:

从 Node.js 内部:

var die = function(quitMsg)

    console.error(quitMsg)
    process.exit(1);
 

die('Process quit');

有某些 methods available 用于退出,仅适用于 POSIX(即非 Windows),它们将通过进程 ID 退出进程。

另外,请注意,您可能可以使用此方法发送 kill() 信号,但这并不是说它不适用于 Windows:

process.kill(pid, [signal])

【讨论】:

但是我怎么知道其他正在运行的node.exe的pid呢? @Dokkat console.log('This process is pid ' + process.pid); 将从另一个 Node.exe 打印 pid,然后您使用该进程的 pid 的命令行参数执行新的,并在新脚本中发送 SIGTERM到您在argv 中的pid。所有信息都可以在上面的链接中找到。 @Viclib 如果您仍然感兴趣,我实际上遇到了这个特定问题,我只需要使用process.kill(pid, [signal])。如果您愿意,我可以提供更多信息。 @BlazeBiker 幸运的是,在这 4 年里,我实际上设法终止了这个过程。更不用说,我相信一些未来的读者会很高兴知道你的发现作为这个问题的答案! 只是为了添加更多细节,我还在下面的答案中发布了我的发现:***.com/a/36179604/2831961

以上是关于如何杀死 node.js 上的打开进程?的主要内容,如果未能解决你的问题,请参考以下文章

如果脚本被杀死,node.js 生成的进程仍然存在

Node.js 进程在 aws 实例上被杀死

停止Node服务器

Node.js 进程在 AWS Fargate 中的行为如何?

关闭 MySQL 后 Node.js 进程无法恢复,然后再打开

如何杀死 pm2 --no-daemon 进程