#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();
});
Строго говоря, это происходит не «после» завершения процесса, а до завершения родительского процесса. Хотя я не думаю, что в твоем примере это имеет какое-то значение.