我正在 Node.js 中创建一个小型专有游戏服务器管理器;目前它通过生成通过以下方式运行游戏child_process
:
var server = spawn(cmd, args, { cwd: 'something' });
只要经理继续运行,我就可以管道命令并按照我的意愿处理孩子。但是,请考虑我的经理崩溃或关闭的可能性。然后我将如何重新连接 到先前生成的子进程(在管理器关闭时仍在运行)?我可以存储 pidfiles 以尝试基于 pid 重新连接;但我不确定如何获取可以child_process
访问孩子对象的stdio
对象。
我真的希望这是可以恢复的;任何帮助表示赞赏,谢谢!
请注意:游戏服务器是专有的,例如 Minecraft、Source DS 等。假设我无权访问服务器源。
编辑
从节点读取一些源代码后child_process
,看起来如果您在名为stdinStream
,的选项中指定了一个属性stdoutStream
,或者stderrStream
它应该只打开一个套接字。(见第428 - 496行)。所以问题是,我如何阻止 spawn实际执行 spawn,而只是根据指定的 pid 和我传递的流设置其值。(由于 fd 是作为管道创建的,所以我会stdinStream
通过这样做来获得我的结果。)fs.createWriteStream('/proc/PID/fd/0');