首页 > 解决方案 > Node.js HTTP 服务器子进程不会在 Node.js 中被杀死

问题描述

我正在使用 Node.js(在Windows 10上运行)来制作服务器管理器。我有使用此节点 http 服务器运行的其他节点 http 服务器。我有一个具有启动和停止按钮的网站,它们应该启动和停止子进程服务器。

我在用

var spawn = require('child_process').spawn,
    serverCLI = {};

...

serverCLI[server.name].term = spawn('cd path/to/server/ && node server');

让每个服务器运行。它可以启动服务器,但是我遇到的问题是停止服务器。

停止服务器的代码目前是

serverCLI[server.name].term.kill('SIGKILL');

我最初使用的是 exec 而不是 spawn。我尝试使用SIGTERMand SIGINT,但我没有运气。子服务器继续运行。

我什至使用获取子进程 IDserverCLI[server.name].term.pid并在 windows 命令行中搜索 pid,但它不存在。

我究竟做错了什么?我怎样才能解决这个问题?

标签: node.jscommand-linechild-process

解决方案


在 exec 上发送 pkill,您可以使用许多选项,可以将所有服务器分组在同一个组进程 ID 上,或者通过父进程找到它们,请参阅 pkill 的手册页。

    var processname = 'PrettyServer';
    var exec = require('child_process').exec;
    var child;

    child = exec(`pkill -i ${processname}`, function (error, stdout, stderr) {

        if (error !== null) {
            console.log('exec error: ' + error);
            // ETC
        } else {
            // ETC
        }
    });

推荐阅读