Как дать дочернему процессу контроль над терминалом в Node.js?

У меня есть приложение Node, которое я запускаю из терминала (node myapp.js). Это приложение порождает процесс дочернего узла (через child_process.fork).

После этого я хочу выйти из родительского процесса и передать дочернему процессу управление терминалом. Прямо сейчас, когда я выхожу из родительского процесса, дочерний процесс просто запускается в фоновом режиме, а терминал возвращается к bash. Как я могу передать терминал дочернему процессу, чтобы он не вернулся к bash?


person Joshua Wise    schedule 16.07.2015    source источник
comment
Если вы хотите разветвить дочерний процесс, а затем немедленно умереть как родитель и передать управление ребенку, мой вопрос: зачем вообще разветвлять новый процесс?   -  person pooley1994    schedule 16.07.2015
comment
Было бы удобно иметь возможность разделить мои процессы по функциональности, а не валить их все в один процесс. Это позволило бы увеличить модульность.   -  person Joshua Wise    schedule 27.07.2015


Ответы (1)


Посмотрите на child_process.spawn, а также options.detached в документации node.js. Что-то вроде этого может быть тем, что вы ищете:

const spawn = require('child_process').spawn;

const child = spawn(process.argv[0], ['child_program.js'], {
  detached: true,
  stdio: ['ignore']
});

child.unref(); //causes the parent's event loop to not include the child in its reference count, allowing the parent to exit independently of the child, unless there is an established IPC channel between the child and parent.

Node предоставляет модуль child_process, в котором есть три основных способа создания дочернего процесса.

  • exec - метод child_process.exec запускает команду в оболочке/консоли и буферизует вывод.
  • spawn — child_process.spawn запускает новый процесс с заданной командой
  • fork — метод child_process.fork является частным случаем spawn() для создания дочерних процессов.
person Tom    schedule 13.07.2016