Node.js不会在Node.js中杀死HTTP服务器子进程

时间:2018-11-16 20:40:27

标签: node.js command-line child-process

我正在使用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。我尝试使用SIGTERMSIGINT,但没有运气。子服务器继续运行。

我竭尽全力用serverCLI[server.name].term.pid来获取子进程ID,并在Windows命令行中搜索pid,但是它不存在。

我在做什么错?我该如何解决?

1 个答案:

答案 0 :(得分:0)

在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
        }
    });