2014-02-18 18 views
1

我想通過setTimeout使用子進程調用一個函數,該進程可能在setTimeout發生之前退出。從子進程調用setTimeout(NodeJS)

1)我假設如果子進程調用該函數(即使它是外部定義的),如果子進程退出,setTimeout將被取消。它是否正確?

2)如果是這樣,讓子進程發信號通知父進程來執行setTimeout,還是有更好的方法來實現這一點?

謝謝!

回答

0

我不確定自己完全理解,但讓我提供一些可能適用的鏈接和示例。

在主進程和子進程之間發送和接收消息可能是child.send/process.send,它是child_process模塊​​和集羣的一部分。

例如,清除的setTimeout當子進程發送消息給主:

var cp = require('child_process'); 
var child = cp.fork(__dirname + '/sub.js'); 

var timer = setTimeout(function(){ 
    console.log('timed out'); 
}, 5000); 

child.on('message', function(msg) { 
    console.log(msg); 
    clearTimeout(timer); 
}); 

孩子

setTimeout(function() { 
    console.log('finished doing some long task'); 
    process.send({ status: 'done' }); 
}, 3000); // set this to something larger than 5000ms to see the timeout 

您可能也有興趣在exitclose事件的子進程做類似的事情。

+0

感謝您對此採取行動。我最感興趣的是過程結束後進程調用的setTimeout的行爲。我假設它不運行,所以我試圖找到一種方法來讓一個子進程調用一個setTimeout,它會在setTimeout需要運行時執行,而不管子進程是否存在。 – erythraios

+0

嗯..提供的例子顯示瞭如何運行一個setTimeout,而不管孩子的存在如何,但是關於在孩子退出後,從孩子內部開始setTimeout保持不變,我不相信這是可能的,因爲運行定時器的進程不再運行。唯一的辦法是在某個過程中,父母或其他孩子,仍然存在。 –

+0

這就是我的想法。所以,現在我想知道的是,我是否可以通過向父進程發送消息來實現此目的,父進程又會執行setTimeout。有沒有比這更好的方法? – erythraios