Я хочу закончить мой дочерний процесс обработкой сигнала SIGINT.
У меня есть основной процесс, который запускает дочерний процесс:
const childProcess = require('child_process');
console.log('started main');
const subprocess = childProcess.exec('node childProcess.js', (error, stdout) => {
console.log('error:', error);
console.log('log from child process: .............');
console.log(stdout);
console.log('log from child process - end: .............');
});
console.log('last line main');
subprocess.kill('SIGINT');
setTimeout(() => {
console.log('ended main');
}, 3000);
Дочерний процесс выглядит так:
const fs = require('fs');
console.log('child started');
process.on('SIGINT', () => {
console.log('child ending');
fs.writeFileSync('test1.txt', 'abc');
process.exit();
});
fs.writeFileSync('test0.txt', 'abc');
setTimeout(() => {
console.log('timeout ended');
}, 2000);
Когда я запускаю основной процесс с node index.js
с терминала, я получаю следующий вывод:
started main
last line main
error: { Error: Command failed: node childProcess.js
at ChildProcess.exithandler (child_process.js:272:12)
at ChildProcess.emit (events.js:127:13)
at maybeClose (internal/child_process.js:933:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
killed: true,
code: null,
signal: 'SIGINT',
cmd: 'node childProcess.js' }
log from child process: .............
child started
timeout ended
log from child process - end: .............
ended main
Это означает, что обработчик SIGINT в дочернем процессе не запускается. Также text0.txt создается как побочный эффект, а text1.txt - нет. Я также пытался без setTimeout в дочернем процессе, но SIGINT не срабатывает. Почему SIGINT не срабатывает?
окружающая среда:
Мне удалось запустить SIGTERM в дочернем процессе, закончив его в списке процессов «системный монитор».