Я использую следующий код, чтобы создать дочерний процесс, который запрашивает пользователя для ввода, а затем он должен завершиться, но событие close
никогда не запускается.Детский процесс NodeJS не запускает событие закрытия при записи в STDIN
const spawn = require('child_process').spawn;
const p = spawn('script', ['that', 'prompts', 'user', 'for', 'input']);
process.stdin.on('data', (data) => {
p.stdin.write(data);
});
p.on('close', (code) => {
console.log(`child process closed with code ${code}`);
});
Если я нерест процесс, который не требует от пользовательского ввода (например, ls´), the
close` срабатывает событие без какого-либо вопроса. Я подозреваю, что кое-что о написании непосредственно в STDIN дочернего процесса от родительского препятствует его расторгать правильно, но я не могу понять, почему. Я пропустил что-то очевидное здесь?
Этот код работает так, как есть. Попробуйте его с помощью «bc» и введите «quit». Проблема заключается в том, что вы не создаете, фактически не выходите в условиях, которые, по вашему мнению, должны покидать. – pvg