nodejs/node

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

Open

#19 433 ouverte le 18 mars 2018

Voir sur GitHub
 (2 commentaires) (1 réaction) (0 assignés)JavaScript (35 535 forks)batch import
child_processhelp wantedstale

Métriques du dépôt

Stars
 (117 218 stars)
Métriques de merge PR
 (Merge moyen 18j 17h) (219 PRs mergées en 30 j)

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

Guide contributeur