Cha*_*had 8 javascript process stdio child-process node.js
我正在Node.js中创建一个小型专有游戏服务器管理器; 目前它通过以下方式产生游戏child_process:
var server = spawn(cmd, args, { cwd: 'something' });
Run Code Online (Sandbox Code Playgroud)
只要经理继续运行,我就可以管理命令并按照我的意愿处理孩子.但是,请考虑我的经理崩溃或关闭的可能性.然后 ,我将如何重新连接到之前生成的子进程(在管理器关闭时仍在运行)?我可以存储pidfiles尝试重新连接基于pid; 但我不知道如何获得一个child_process可以访问孩子stdio对象的对象.
我真的希望这是可以恢复的; 任何帮助表示赞赏,谢谢!
请注意:游戏服务器是专有的,一些例子是Minecraft,Source DS等.假设我无法访问服务器源.
编辑
从节点的阅读一些源代码之后child_process,它看起来,如果你在叫的选项指定属性一样stdinStream,stdoutStream或者stderrStream它应该只是打开一个套接字给它.(参见线428 - 496).那么问题是,我如何停止实际生成一个spawn,而只是根据我传递的指定pid和流来设置它的值.(因为fd是作为管道创建的,所以我应该stdinStream通过这样做fs.createWriteStream('/proc/PID/fd/0');来完成.)
在与节点项目的一些人交谈后,看起来我能实现这一点的唯一方法是处理 proc fs 中的原始文件描述符。我可能会模拟类似于child_process对象的东西并创建其流,例如:
var child = {};
child.stdin = fs.createWriteStream('/proc/PID/fd/0');
child.stdout = fs.createReadStream('/proc/PID/fd/1');
child.stderr = fs.createReadStream('/proc/PID/fd/2');
Run Code Online (Sandbox Code Playgroud)