Skip to content

Ubuntu: stdout and stderr data is not emitted on child processes (with piped stdio) #42438

Description

@medikoo

Version

v18.0.0-nightly20220311d8c4e375f2

Platform

Linux parallels-Parallels-Virtual-Platform 5.13.0-37-generic #42~20.04.1-Ubuntu SMP Tue Mar 15 15:44:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Subsystem

No response

What steps will reproduce the bug?

Run node main.js having following two files in same folder:

child.js

console.log("Some text");constinterval=setInterval(()=>{console.log("Other text")},100)setTimeout(()=>clearInterval(interval),1000);

main.js

constchildProcess=require('child_process');constchild=childProcess.spawn('node',['child.js'],{stdio: 'pipe'});if(child.stdout){console.log("Attach std listeners")child.stdout.on('data',data=>console.log("Child stdout:",String(data)));child.stderr.on('data',data=>console.log("Child stderr:",String(data)));}child.on('close',(...args)=>{console.log("Child closed",args);});

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior?

Expected output (e.g. observable on macOS) is:

Attach std listeners
Child stdout: Some text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child stdout: Other text
Child closed [ 0, null ]

What do you see instead?

Attach std listeners
CLOSED [ 0, null ]

Additional information

When stdio is set to inherit then the child output is exposed as expected.

I observe it on every Node.js version I've tried (v14, v16, v17, and latest build)

Metadata

Metadata

Assignees

No one assigned

    Labels

    child_processIssues and PRs related to the child_process subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions