Что произойдет, если дочерний процесс завершится?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Родительский процесс получит событие exit. Если дочерний процесс завершился с ошибкой, также будет сгенерировано событие error и передан объект ошибки. Стандартные потоки ввода-вывода дочернего процесса (stdout, stderr) будут закрыты, и родительский процесс должен обработать эти события, чтобы избежать утечек ресурсов (например, очистить обработчики событий).
Пример обработки завершения:
const { spawn } = require('child_process');
const child = spawn('ls', ['-lh', '/usr']);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
child.on('error', (err) => {
// Обработка ошибки запуска или выполнения процесса
console.error('Failed to start subprocess.', err);
});
child.on('exit', (code, signal) => {
// Обработка завершения процесса
if (code !== 0) {
console.warn(`Child process exited with code ${code} and signal ${signal}`);
} else {
console.log(`Child process exited successfully.`);
}
});
Если родительский процесс не прослушивает событие exit, он продолжит свое выполнение. Если дочерний процесс завершился с ошибкой и событие error не обработано, возникнет необработанное исключение и, скорее всего, родительский процесс завершится.
Также могут возникнуть процессы-зомби, если родительский процесс не обрабатывает событие exit и операционная система не может корректно очистить ресурсы дочернего процесса. Это происходит, когда дочерний процесс завершился, но его PID и статус завершения остаются в таблице процессов до тех пор, пока родитель не "соберет" его статус.