我正在使用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
和SIGINT
,但没有运气。子服务器继续运行。
我竭尽全力用serverCLI[server.name].term.pid
来获取子进程ID,并在Windows命令行中搜索pid,但是它不存在。
我在做什么错?我该如何解决?
答案 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
}
});