Проверяет понимание того, как Node.js запускает внешние процессы и зачем нужен модуль child_process для интеграции с системными командами.
Node.js хорошо справляется с асинхронным вводом-выводом, но иногда нужно выполнить внешнюю программу или системную команду. Для этого используется встроенный модуль child_process, который создаёт дочерние процессы операционной системы. Это позволяет делегировать тяжёлые или специализированные задачи отдельным утилитам, не блокируя основной event loop.
spawn — запускает процесс и возвращает потоковый интерфейс для чтения вывода по мере поступления данных.exec — выполняет команду в shell и буферизует весь вывод, удобно для коротких команд.execFile — запускает файл напрямую без shell, безопаснее и быстрее.fork — специальный случай spawn для запуска других Node.js-модулей с IPC-каналом.const { exec, spawn } = require('child_process');
// exec: буферизует вывод, удобно для коротких команд
exec('ls -la', (err, stdout, stderr) => {
if (err) return console.error(err);
console.log(stdout);
});
// spawn: стримит вывод, лучше для больших данных
const child = spawn('ping', ['-c', '3', 'google.com']);
child.stdout.on('data', (data) => process.stdout.write(data));
child.on('close', (code) => console.log('exit code:', code));
Модуль полезен для вызова CLI-утилит, запуска скриптов на других языках, обработки медиа, работы с git или системными сервисами. Для длительных процессов предпочитайте spawn, чтобы не держать весь вывод в памяти, а exec — только для небольших команд. Всегда валидируйте входные данные, чтобы избежать инъекций команд.
Итог: child_process расширяет возможности Node.js за счёт системных процессов, и его стоит применять, когда нужна интеграция с внешними программами или изоляция тяжёлых задач от основного приложения.