先来看现象,
节点代码:
const cp = require('child_process');
var ls = cp.spawn('ls', ['/']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process closed with code ${code}`);
});
while(true){}
运行这个 nodejs 代码,没有任何显示,似乎没有触发任何事件。
然后在另一个shell中运行“ps -ef | grep ls | grpe -v grep”,结果是:
liyuanq+ 10995 10990 0 11:06 pts/3 00:00:00 [ls] <defunct>
如果删除代码:
while(true){}
节点进程退出,并触发 on data 事件。
问题是为什么节点在父节点进程退出之前实际完成它的工作时不关闭生成的进程。
我的环境:
操作系统:Debian 8.4 x86_64
节点:v6.1.0