nodejs/node

child_process: 'close' not emitted after .disconnect() in parent process

Open

#19,433 opened on Mar 18, 2018

View on GitHub
 (1 comment) (1 reaction) (0 assignees)JavaScript (117,218 stars) (35,535 forks)batch import
child_processhelp wanted

Description

  • Version: v9.8.0
  • Platform: Linux 64bit
  • Subsystem: child_process

When calling child.disconnect() from a parent process (not in cluster mode), the child process object does not emit a close event after the exit event.

If however the child process itself calls process.disconnect() it works as expected.

Example:

// parent.js
const child_process = require('child_process');

const child = child_process.fork('./child.js', {
    stdio: ['pipe', 'pipe', 'pipe', 'ipc']
});

setTimeout(() => {
    child.disconnect();
}, 1000);

child.on('exit', () => {
    console.log('exit');
});

child.on('close', () => {
    console.log('close');
});

child.stderr.pipe(process.stderr);
child.stdout.pipe(process.stdout);
// child.js
process.on('disconnect', () => {
    console.log('cya');
});

Output:

cya
exit

Expected Output:

cya
exit
close

Contributor guide

child_process: 'close' not emitted after .disconnect() in parent process · nodejs/node#19433 | Good First Issue