我创建了一个程序来启动,停止和更新应用程序。
所以我有一系列独立的子进程,这些子进程填充在启动另一个应用程序服务器的方法上:
let options = {
"cwd": dir,
"detached": true,
"env": env
};
this.apps[name] = child_process.spawn('node', [init], options);
“应用程序”保留每个启动的应用程序的“生成”返回的ChildProcess对象。初始化是每个应用程序的server.js文件。
我有一种方法可以列出显示pid和应用程序名称的应用程序:
const k = Object.keys(this.apps);
return k.map((k) => ({ pid: this.apps[k].pid, name: k }));
还有另一种方法可以停止(杀死)应用程序。
this.apps[name].stdin.pause();
this.apps[name].kill();
这个想法是,当应用程序停止时,该pid将不会显示...当启动该应用程序时,该pid将显示在列表中。我有一个侦听器,可在停止时清除数组中进程的pid:
app.on('close', (code, signal) => this.apps[name].pid = null );
但是,当我列出应用程序时,即使启动了应用程序,某些pid也没有显示...有时,当我停止应用程序时,它看起来似乎并没有停止...好像我没有完全获取ChildProcess对象。实际上,我不知道为什么会发生这种情况以及如何解决...
有人可以指明方向吗? 非常感谢你...