提问者:小点点

Nodejs子进程退出行为


我有一些奇怪的行为,我不明白。 请帮帮我。

这里有一个父进程test-parent.js:

const cp = require('child_process');
const path = require('path');

const fork = cp.fork(path.join(__dirname, 'test-child.js'));

fork.on('message', console.log);
fork.on('exit', (code) => {
  console.log('Exited with code:', code);
});

fork.send({ sum: 0, set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11] });

这里是一个子(使用CPU绑定子集求和算法)test-child.js:

const subsetSumFactory = require('./subset-sum');

process.on('message', (message) => {
  const subsetSum = subsetSumFactory(message.sum, message.set);

  subsetSum.on('match', (subset) => { });

  subsetSum.on('end', (totalSubsets) => {
    process.send({ event: 'end', data: { totalSubsets, pid: process.pid } });
  });

  subsetSum.start();
});

如果我运行父代码,我会从子代码那里得到正确的消息,并且子代码会等待另一个消息。

所以我不明白的一点是,为什么子进程在运行后不立即退出,而是等待父进程的消息。 因为如果我只运行子代码:node test-child.js,它会立即退出。


共1个答案

匿名用户

如果您希望子进程立即退出,您必须从父进程发送某种终止消息到fork子进程,然后退出子代码,否则它将继续运行,因为它正在等待父进程首先退出。