のNode.js 8.9.1、Linux版、私は子供と終了を開始するために、親が必要4.10.0-42ジェネリック分離した子を実行した後に親プロセスが自動的に終了しないのはなぜですか?
親
const { fork } = require('child_process');
const forked = fork('child.js', {
detached: true,
stdio: 'ignore'
});
const config = {
name: 'trex',
interval: 2000
};
forked.send(config);
forked.unref();
for (let i = 0; i < 3; i++) {
console.log('do staff');
}
子供
const work = function() {
let sum = 0;
for (let i = 0; i < 1e10; i++) {
sum += i;
}
};
const start = function(config) {
setTimeout(function run() {
work();
setTimeout(run, config.interval);
}, config.interval);
};
process.on('message', function(config) {
start(config);
});
通常は。今私がnode parent.js
を実行すると、私はまだ親が走っているのを見る。
[email protected]:~/dev/$ ps aux | grep -e "parent\|child" | grep node
trex 5134 0.0 0.1 874016 29460 pts/11 Sl+ 10:44 0:00 node parent.js
trex 5140 86.3 0.1 874108 30252 ? Rsl 10:44 4:59 /home/trex/.nvm/versions/node/v8.9.1/bin/node child.js
私には、process.exit()
があります。しかし、なぜそれが正常に終了しないのですか?私のアプリの親はsetTimeout
ループ内にあり、多くのロジックがあり、時間の間隔で1回だけ実行する必要があります。
使用 'forked.unref()'、あなたの 'forked.send後の()' – Keith
@Keithが、それにもかかわらず、親がまだ実行されて、試してみました。 – trex
Windowsのところで試してみましたが、まだ動作しているように見えますが、あなたはまだデタッチされています:true?..もしstdioが参照されている場合は、stdio: 'ignore'を試してみてください。 – Keith