【发布时间】:2021-04-17 07:10:22
【问题描述】:
我在 NodeJS 中执行下面的代码。
如下所示,父进程生成一个子进程并设置 env 变量。 该变量用于在执行文件时决定进程是父进程还是子进程。
const {IS_CHILD} = process.env
if(IS_CHILD){
console.log('CHILD');
console.log('child pid = ',process.pid);
console.log('child env values = ',process.env);
}else{
const {parse} = require('path')
const {root} = parse(process.cwd());
console.log('PARENT');
console.log('parent pid = ',process.pid)
const {spawn} = require('child_process');
const sp = spawn(process.execPath,[__filename], {
cwd: root,
env: {IS_CHILD : true}
});
sp.stdout.pipe(process.stdout); // if this is commented
}
我面临的问题是,如果我在父进程中注释掉代码sp.stdout.pipe(process.stdout),子进程输出不会显示在控制台上。
(IS_CHILD if block 里面的三行)
如果sp.stdout.pipe(process.stdout)这一行被注释掉了,是不是意味着子进程的process.env也没有写出来?
有人可以帮忙吗?
我这里有什么遗漏吗?
我假设即使sp.stdout.pipe(process.stdout) 行被注释掉,child process 也应该在其中设置env variable,因为我们已经执行了spawn command
【问题讨论】: