Давайте сначала посмотрим на явление,
Код узла:
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, ничего не отображается, похоже, событие не было запущено.
Затем запустите «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