Ответ вслух Middle Файлы и процессы обновлено

spawn, exec, execFile, fork: что когда

Вопрос

Расскажи, какие способы запустить внешний процесс есть в Node.js и когда какой выбрать.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В childprocess четыре основных функции. spawn запускает программу и даёт её stdout и stderr как потоки, поэтому подходит для долгих процессов и больших объёмов, например ffmpeg. exec запускает строку через shell и отдаёт весь вывод в колбэке.

Что должно прозвучать в ответе

  • spawn: потоковый вывод, для долгих программ и больших данных

  • exec: через shell, вывод буферизуется (maxBuffer 1 МБ), для коротких команд

  • execFile: без shell, безопаснее с пользовательскими аргументами

  • fork: Node-скрипт с IPC-каналом для обмена сообщениями

  • Sync-версии блокируют цикл, только для CLI и старта

  • Опасность exec: command injection

Что могут спросить следом

  • Чем fork отличается от worker_threads?
  • Как убить дочерний процесс вместе с его детьми?

Разбор

В child_process четыре основных функции. spawn запускает программу и даёт её stdout и stderr как потоки, поэтому подходит для долгих процессов и больших объёмов, например ffmpeg.

exec запускает строку через shell и отдаёт весь вывод в колбэке. Удобно для коротких команд вроде git rev-parse, но вывод ограничен maxBuffer, по умолчанию мегабайт, и есть риск command injection, если в строку попадает ввод пользователя.

execFile делает то же без shell: аргументы передаются массивом, и спецсимволы не интерпретируются. С внешними данными я выбираю его или spawn.

fork предназначен для Node-скриптов: он открывает IPC-канал, и процессы общаются сообщениями. Синхронные версии вроде execSync блокируют event loop, их место в CLI-скриптах, а не в сервере.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.