Node.js 为什么nodejs生成过程成为<;不复存在>;直到父母离开
我们先来看看这个现象 Nodejs代码:Node.js 为什么nodejs生成过程成为<;不复存在>;直到父母离开,node.js,spawn,zombie-process,defunct,Node.js,Spawn,Zombie Process,Defunct,我们先来看看这个现象 Nodejs代码: 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('c
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>
节点进程退出,并触发on data事件
问题是,为什么节点在父节点进程退出之前,在实际完成其作业时不关闭生成的进程
我的环境:
操作系统:Debian 8.4 x86_64
Node:v6.1.0非常有趣的观察,谢谢 如果有一个专用线程对子线程执行wait(),则不会发生这种情况 如果子出口之间存在间隙,并且父出口执行wait(),则子出口将被视为在该间隙内失效 在节点中,由于我们只有一个线程,并且它正在执行无限循环,因此它无法进入事件循环、截获子出口并从任务列表中清除子ID 如果将while true循环替换为具有长延迟的setTimeout,线程将获得空闲CPU,等待子线程并将其从任务列表中清除—我已经验证了这一点
希望这能有所帮助。我的上帝!解决了的!非常感谢。
while(true){}