2015-05-19 117 views
1

我有一個啓動了多個子進程的node.js程序。我希望能夠測試這些子進程會發生什麼情況,如果節點崩潰但讓它們繼續運行。我試過如下:殺死一個node.js程序而不會終止子進程

process.on('SIGUSR1', function(){ process.exit(0); }); 

這個工作對我的測試設置大,子進程保持正確的運行和節點的實例關閉,當我跑以下命令:

killall -10 node 

但是,太多的我對我的生產部署感到驚訝,但卻無法讓兒童流程繼續。我感興趣的主要子進程是鉻瀏覽器的一個實例。差異似乎是過程開始的方式。在我的測試設置中,我直接調用節點,但在生產環境中,我調用了一個調用的腳本。

我想找到的是上面的匿名回調函數中的一種方法,它處理SIGUSR1信號,告訴節點在它自己死亡時不關閉它的子進程。我知道我可以分離我創建的流程,但我寧願做一些較少參與的事情(儘管承認這並不太涉及)。

我在Ubuntu 12.04上運行node 0.8.21。

感謝您的任何想法,你可以扔我的路。

回答

1

我繼續前進,試圖看看創建過程分離的多少悲傷會導致我,這是否仍然會允許我使用信號回調等,並且看起來都很好。所以我只是要這樣實現它。

這裏是我的原代碼:

self.oUIProcessHandle = spawn('chromium-browser', 
    ['http://127.0.0.1:8091/index.html', '-kiosk', '-incognito', '-start-maximized']); 

我把它改成如下:

self.oUIProcessHandle = spawn('chromium-browser', 
    ['http://127.0.0.1:8091/index.html', '-kiosk', '-incognito', '-start-maximized'], 
    {detached: true, stdio: ['ignore', 'ignore', 'ignore']}); 

現在,當我打電話process.exit(0)從我的代碼,它離開我的瀏覽器啓動和運行。