Node.js:杀死ChildProcess#spawn的subprocess

考虑下面的代码:

import {spawn, exec} from 'child_process'; var child = spawn('su', [process.env.USER, '-c', 'while (true); do sleep 0.3; echo "tick"; done'], {stdio: ['ignore', 'pipe', 'pipe']} ); child.stdout.pipe(process.stdout); child.stderr.pipe(process.stderr); setTimeout(() => { child.kill(); }, 1000); 

在这里,我试图运行特定的脚本,运行其他subprocess(在这个例子中su会产生一个bash进程),并closures它。 但是,我不能让它工作如何,我期望。

调用child.kill()杀死su父进程而不是其subprocess。

可以做些什么来实现它 – 调用exec(`pkill -TERM -P ${child.pid}`)而不是child.kill() 。 据我所知,这将杀死与父母child.pid整个进动树。

然而,将两种方法结合起来却有一些奇怪之处:

 setTimeout(() => { child.kill(); exec(`pkill -TERM -P ${child.pid}`); }, 1000);` 

即使在进程被终止之后,这段代码也会继续写入控制台。

为什么发生这种情况? 有人可以解释吗?