我在Node.js中創建了一個小型私有遊戲服務器管理器;目前,它由通過child_process
產卵運行遊戲:通過nodejs重新連接產生的進程
var server = spawn(cmd, args, { cwd: 'something' });
只要經理繼續運行,我能管的命令和處理孩子,我想。但是,請考慮我的經理崩潰或關閉的可能性。我如何重新連接到以前衍生的子進程(當管理者關閉時仍然運行)?我可以存儲pidfiles以基於pid嘗試重新連接;但我不知道如何獲得child_process
對象訪問該對象的子對象。
我真的希望這可以恢復;任何幫助表示讚賞,謝謝!
請注意:遊戲服務器是專有的,有些例子是我的世界,來源DS等。假設我沒有訪問服務器源。
編輯
閱讀從節點的child_process
一些源代碼看起來,如果你指定稱爲stdinStream
,stdoutStream
選項的屬性,或者stderrStream
它應該只是打開一個套接字它像後。 (見行428 - 496)。所以問題是,我怎麼停止產生實際上做一個產卵,而是隻是基於指定的PID和我通過的流設置其值。 (我會得到我的stdinStream
做fs.createWriteStream('/proc/PID/fd/0');
它應該工作,因爲這FD作爲一個管道創建。)
hmm。我不知道你是否可以用任何編程語言來做到這一點,更不用說js/node了。如果是我,我會看看使用套接字來解決這個問題 – ControlAltDel 2012-04-11 19:48:58
我通過子進程的stdin傳遞一些命令,因爲我幾乎沒有使用* nix套接字的經驗,我怎麼才能完成重新獲得'管道'到孩子的「stdin」? – Chad 2012-04-11 21:05:40
任何人對此有任何想法? – Chad 2012-04-15 17:17:04