У меня есть архитектура с одним родителем, которая порождает дочерний элемент следующим образом:
this.process = child.spawn(this.cmd, this.args);
this.process.on('exit', (code: number, signal: string) => {
this.exitCode = code;
console.log(`exit code: ${code}`);
});
особого варианта нет, потому что я хочу сохранить связь с ребенком. Итак, когда я нажимаю Ctr-C, чтобы убить родителя, он ловит SIGINT
, чтобы (1) завершить дочерний элемент, (2) правильно выйти. Но SIGINT
также распространяется на потомка, поэтому родитель не может завершить его корректно. Итак, есть ли способ сделать это? может быть, предотвратив распространение SIGINT
на ребенка? или говорить ребенку игнорировать сигнал?
я знаю, что что-то возможно, добавив опции detached: true
и stdio: 'ignore'
при нересте, но я не хочу этого делать, потому что, если родитель умрет, я закончу процесс зомби. В то время как сохранение ссылок гарантирует, что ребенок будет убит, если родитель неожиданно умрет. Наконец, я хочу не поймать SIGINT
в дочернем элементе, так как я хочу, чтобы он был немым.
EDIT: у родителя уже есть process.on('SIGINT', () => { ... }
, а дочерний — на python.