1
我想通過setTimeout使用子進程調用一個函數,該進程可能在setTimeout發生之前退出。從子進程調用setTimeout(NodeJS)
1)我假設如果子進程調用該函數(即使它是外部定義的),如果子進程退出,setTimeout將被取消。它是否正確?
2)如果是這樣,讓子進程發信號通知父進程來執行setTimeout,還是有更好的方法來實現這一點?
謝謝!
我想通過setTimeout使用子進程調用一個函數,該進程可能在setTimeout發生之前退出。從子進程調用setTimeout(NodeJS)
1)我假設如果子進程調用該函數(即使它是外部定義的),如果子進程退出,setTimeout將被取消。它是否正確?
2)如果是這樣,讓子進程發信號通知父進程來執行setTimeout,還是有更好的方法來實現這一點?
謝謝!
我不確定自己完全理解,但讓我提供一些可能適用的鏈接和示例。
在主進程和子進程之間發送和接收消息可能是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
感謝您對此採取行動。我最感興趣的是過程結束後進程調用的setTimeout的行爲。我假設它不運行,所以我試圖找到一種方法來讓一個子進程調用一個setTimeout,它會在setTimeout需要運行時執行,而不管子進程是否存在。 – erythraios
嗯..提供的例子顯示瞭如何運行一個setTimeout,而不管孩子的存在如何,但是關於在孩子退出後,從孩子內部開始setTimeout保持不變,我不相信這是可能的,因爲運行定時器的進程不再運行。唯一的辦法是在某個過程中,父母或其他孩子,仍然存在。 –
這就是我的想法。所以,現在我想知道的是,我是否可以通過向父進程發送消息來實現此目的,父進程又會執行setTimeout。有沒有比這更好的方法? – erythraios