Node.js를 8.9.1, 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
루프 안에있다, 거기에 많은 논리이며 그것은 시간 간격으로 한 번만 실행해야합니다. https://nodejs.org/api/child_process.html 문서에서
사용'forked.unref()'당신'forked.send 후()' – Keith
@Keith 그럼에도 불구하고, 부모가 계속 실행되고, 시도했다. – trex
윈도우즈에서이 기능을 시험해 보았는데 작동하는 것처럼 보였습니다. 여전히 분리되어 있습니다 : 진정한 의미입니까? .. stdio가 참고 사항을 지키는 경우에는 stdio : 'ignore'를 시도해보십시오. – Keith