我有一個運行在Node服務器上的JS模塊,它產生一個進程來處理我們將信息存儲在我們想發送給另一個服務的文件中的情況,但該服務當前已關閉,並且我想偶爾ping它看它是否備份。如何獲得對模塊中以前分叉過程的引用?
該模塊被其他開發人員用來捕獲要發送到日誌記錄服務的信息,並且他們可能會從他們自己的應用程序多次調用該模塊。所以,模塊需要了解這個過程是否已經產生。
我遇到的問題是,當這個過程已經產生,我不知道如何得到它的參考。
Parent.js(未粘貼整個事情簡潔)
var cp = require('child_process');
var dbWatcher;
if (!processDoesExist) {
dbWatcher = cp.fork(__dirname + '/dbWatcher.js', [], {execArgv: ['--debug=5859']});
} else {
dbWatcher.send(message);
}
當這個模塊被加載和確實存在的過程中,dbWatcher將明顯不確定,導致錯誤。我如何獲得對現有過程對象的引用,例如我在做cp.fork()
時分配的對象?
我試着通過節點的documentation看這個和通常的Google-fu,但我沒有提出解決方案。
更新:可以通過在第一次運行期間將返回的對象分配給全局對象來解決此問題。但是,它確實看起來像Node應該提供一個更乾淨的方式出於某種原因。
感謝您的快速響應!看起來,如果Node允許應用程序產生一個孩子並在父母被殺時讓其繼續運行,那麼如果我保留了進程ID,它應該有辦法在以後獲得同一個引用對象。不幸的是,如果事實並非如此!關於重建爲微處理的有趣點。運行的特定環境是我們期望多個節點服務器在給定的物理服務器上運行的環境,並且每個實例都有一個派生的觀察器進程。 – Mike
如果您可以存儲子進程的pid,我想只需枚舉系統進程並檢查該pid是否可行,然後將其存儲在其他開發人員可以找到該pid的地方?儘管如此,你將無法重新貼上它。與此相關的風險是,儘管這是一個很小的統計概率,但可能會有一些其他系統進程在其子進程死後執行時使用相同的子進程。這一切似乎都非常黑客,並且在未來可能會給你帶來很大的痛苦,因爲時間花在了短時間內。 – brandonscript
是的,我發佈了一個解決方案的更新問題。就像你在這個最新的評論中提到的那樣,基本上都覺得哈克。如果Node有一個可靠的,經過測試的檢索該對象的方法,我會覺得更舒服。 – Mike