Как запускать независимые дочерние процессы и тестировать их — полный гайд по Node.js и Electron
Detached spawn — это запуск дочернего процесса,
который полностью независим от родительского.
Даже если родитель завершится — дочерний процесс продолжит работать.
В Node.js это достигается через опцию detached: true
в сочетании с stdio: 'ignore' и вызовом
child.unref().
На Unix дочерний процесс становится лидером новой группы процессов.
На Windows — создаётся новое консольное окно.
Три ключевых элемента: detached: true создаёт новую группу процессов, stdio: 'ignore' разрывает каналы ввода-вывода, unref() позволяет родителю завершиться.
85% — cron, очереди, обработчики
65% — игровые, API, dev-серверы
40% — helper-процессы из renderer
55% — логгеры, мониторинг, агенты
Вызывает spawn с detached: true
OS создаёт новую группу
Разрыв каналов ввода-вывода
Работает как daemon-процесс
Отвязка от event loop
Завершается без влияния на child
fork() запускает процесс в общем event loop и не создаёт независимый процесс.
detached создаёт отдельный process group, полностью независимый от родителя.
Без stdio: 'ignore' процесс НЕ уйдёт в фон — он останется привязан к родителю.
Только с 'ignore' дочерний процесс становится полностью автономным daemon'ом.
unref() нужен только чтобы родитель мог завершиться. Без него — родитель ждёт.
unref() позволяет event loop'у родителя завершиться, не дожидаясь child.
child_process появляется в первых версиях Node.js. spawn() уже поддерживает создание дочерних процессов.
Добавлена опция detached для создания независимых процессов. Unix использует setpgid, Windows — CREATE_NEW_PROCESS_GROUP.
Electron использует detached spawn для запуска helper-процессов из renderer. Проблема: Windows Security может silently убивать процессы.
Обнаружено: spawn-ed detached unref-ed child process в Windows всё ещё предотвращает exit родителя без stdio: 'ignore'.
Стандартный паттерн: { detached: true, stdio: 'ignore' } + child.unref(). Используется в Electron, VS Code, OpenClaw и других.
Дочерний процесс не завершается при выходе родителя — работает автономно.
Идеально для демонов, логгеров, мониторинга — запускай и забывай.
Работает на Unix (process group) и Windows (новая консоль) с разным поведением.
Запускай helper-процессы из renderer — они переживут закрытие основного окна.
Каждый detached процесс — отдельный OS process. Используй все ядра CPU.
Краш дочернего процесса не влияет на родительский — полная изоляция.