node.js - 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。我尝试使用SIGTERM
and SIGINT
,但我没有运气。子服务器继续运行。
我什至使用获取子进程 IDserverCLI[server.name].term.pid
并在 windows 命令行中搜索 pid,但它不存在。
我究竟做错了什么?我怎样才能解决这个问题?
解决方案
在 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
}
});
推荐阅读
- functional-programming - 使用地图获取两个不同的列表
- google-app-engine - 没有模型类的数据存储查询
- typescript - 如何将angular7降级为angular6
- linux - 使用 sed 替换字符串
- lambda - 在一个 serverlss.yml 中定义 Http 和 websocket API 的角色
- android - 可绘制的全尺寸图像问题
- android - Json parsing with moshi
- php - 如何使用来自计数的 Sql 查询按项目名称获取库存摘要
- postgresql - 如何在 PostgreSQL 中获取两个日期范围之间的数据?
- bash - 在 bash 中执行 gcloud 命令