Как запустить другой процесс после процесса.выход в узле

#javascript #node.js #process

Вопрос:

Я хотел бы запустить процесс, как только завершится другой процесс.

Например, если я запускаю файл JS узла и нажимаю CTRL C, он должен закрыть текущий файл и запустить другой процесс из другого файла JS

Что-то в этом роде (ПСЕВДОКОД):

 process.on('exit', () => {
     console.log("exiting")
}).then( //I am conscious it's wrong to put like that

//open another js file and run this process

);


 

Ответ №1:

Нет, это невозможно, потому process что является глобальным объектом, который представляет текущий Node.js процесс (подробнее об этом читайте в официальных документах). Когда этот процесс завершится, ваш сценарий закончится, поэтому после этого нет возможности что-либо сделать.

Тем не менее, вы можете запустить что-то из того места, куда вы звоните своему Node.js сценарий, потому что вызывающий может все еще работать после выхода вашего сценария. Это может быть сценарий bash, другой Node.js процесс, или что-то еще.

В качестве альтернативы вы можете создать новый независимый процесс в рамках обратного process.on('exit', () => {...}) вызова, как в приведенном ниже фрагменте (подробнее об этом читайте в официальных документах).:

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

process.on('exit', () => {
   const child = spawn('node', ['some_other_script.js'], {
      detached: true,
      stdio: 'ignore'
   });

   child.unref();
});
 

Строго говоря, это происходит не «после» завершения процесса, а до завершения родительского процесса. Хотя я не думаю, что в твоем примере это имеет какое-то значение.