Я создаю небольшой проприетарный менеджер игровых серверов на Node.js; в настоящее время он запускает игру, порождая через child_process
:
var server = spawn(cmd, args, { cwd: 'something' });
. Пока менеджер продолжает работать, я могу передавать команды и иметь дело с дочерним элементом, как мне хотелось бы. Однако рассмотрите возможность того, что мой менеджер аварийно завершает работу или закрывается. Как мне затем повторно подключить к ранее порожденному дочернему процессу (, который все еще работал, пока менеджер не работал)? Я могу хранить pid-файлы, чтобы попытаться переподключиться на основе pid; но я не уверен, как получить объект child_process
с доступом к дочерним объектам stdio
.
Я действительно хотел бы, чтобы это можно было восстановить; любая помощь приветствуется, спасибо!
Пожалуйста, обратите внимание:Игровые серверы являются частными, например, Minecraft, Source DS и т. д. Предположим, что у меня нет доступа к серверу-источнику.
РЕДАКТИРОВАТЬ
После прочтения некоторого исходного кода из узла child_process
похоже, что если вы укажете свойство в опциях с именами stdinStream
, stdoutStream
или stderrStream
, оно должно просто открыть для него сокет. (См. строки 428-496). Таким образом, проблема заключается в том, как остановить порождение из на самом деле , выполняя порождение, и вместо этого просто установить его значения на основе указанного pid и потоков, которые я передаю. (Я бы получил свой stdinStream
, выполнив fs.createWriteStream('/proc/PID/fd/0');
, что должно сработать, так как этот fd создается как конвейер.)