Как я могу программно закрыть программу узла и перезапустить ее без использования каких-либо библиотек?

Мне нужно закрыть программу узла и перезапустить ее. Мне нужно сделать это внутри самой программы, не используя что-то вроде навсегда, требующее настройки.

Я знаю, что могу использовать process.exit(), чтобы закрыть программу, но все, что я могу придумать, чтобы открыть ее обратно, и что я могу запустить из узла, будет уничтожено process.exit() до того, как она завершится. Есть ли способ, которым я не вижу, чтобы отключить вызов exec от процесса перед выходом? Любые другие идеи? Должен ли я смириться с этим и использовать навсегда?


person Brian    schedule 22.10.2013    source источник
comment
Возможный дубликат: stackoverflow.com/ вопросы/9357757/. Есть ли особая причина, по которой вы не хотите использовать навсегда?   -  person hopper    schedule 22.10.2013
comment
Возможный дубликат приложения node.js, которое может перезапускаться   -  person iono    schedule 27.03.2019
comment
Я вернулся через 6 лет, потому что это было отмечено как дубликат. Связанный вопрос показывает решения до 2017 года, для которых требовались другие модули. Когда такой вопрос то просил решение этой проблемы без другого модуля. Что касается того, почему я не хотел устанавливать навсегда, это было промышленное встроенное приложение, которое нужно было развернуть на нескольких машинах. У меня было ограниченное пространство репозитория, и я не хотел приносить другую библиотеку и ее зависимости и фиксировать их, чтобы последующие изменения не сломали мое решение или не потребовали тестирования качества для повторной проверки.   -  person Brian    schedule 28.03.2019


Ответы (1)


Быстро и грязно, не очень хорошо проверено:

var child_process = require('child_process');

process.on('SIGINT', function() {
  console.log('restarting...');
  child_process.fork(__filename); // TODO: pass args...
  process.exit(0);
});

console.log('Running as %d', process.pid);

setTimeout(function(){}, 1000000); // just some code to keep the process running
person robertklep    schedule 22.10.2013
comment
Это сработало как шарм. Огромное спасибо! Я понял, как процесс node был запущен из process.argv, и просто запустил его снова. - person Brian; 23.10.2013