У меня есть архитектура с одним родителем, которая порождает дочерний элемент, как показано ниже:
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.