Ответ 1
Вы можете сделать это, используя child_process.spawn с опцией detached
:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
detached: true
});
Это сделает дочерний процесс лидером новой группы процессов, поэтому он продолжит работу после выхода родительского процесса.
Но по умолчанию родительский процесс будет ждать выхода дочернего ребенка, и он также будет слушать его stdio
. Чтобы полностью отсоединить дочерний процесс от родителя, вы должны:
- отсоединить дочерний элемент
stdio
от родительского процесса, связать его с файлом или с/dev/null
- удалить дочерний процесс из подсчета ссылок родительского цикла событий с помощью метода
unref()
Вот пример этого:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
stdio: 'ignore', // piping all stdio to /dev/null
detached: true
}).unref();
Если вы не хотите потерять дочерний stdin
вывод, вы можете передать его в какой-то файл журнала:
var fs = require('fs'),
spawn = require('child_process').spawn,
out = fs.openSync('./out.log', 'a'),
err = fs.openSync('./out.log', 'a');
spawn('node', ['bgService.js'], {
stdio: [ 'ignore', out, err ], // piping stdout and stderr to out.log
detached: true
}).unref();
Для получения дополнительной информации см. child_process.spawn
документация