Skip to content

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

Description

@laino
  • 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    child_processIssues and PRs related to the child_process subsystem.help wantedIssues that need assistance from volunteers or PRs that need help to proceed.staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions