Дочерний процесс не регистрируется при получении SIGINT - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь уничтожить ранее разветвленный дочерний процесс в Node.js. Я не уверен, что это работает, потому что моя строка console.log не попадает в дочерний процесс.

Вот что я звоню от родителя:

console.log("sending SIGINT from main");
child.kill("SIGINT");

А у потомка:

process.on("SIGINT", () => {
  console.log("Killing bot");
  DBS.Bot.destroy();
  process.exit();
});

Единственный консольный журнал, который я вижу, от родителя ,

1 Ответ

0 голосов
/ 05 апреля 2020

При порождении дочернего процесса NodeJS этот дочерний процесс 'stdout не совпадает с потоком stdout родительского процесса, поэтому вы не видите никаких результатов регистрации. Вы можете добавить следующий код, чтобы скопировать любой вывод вашего дочернего процесса в поток stdout вашего основного процесса:

child.stdout.on ("data", (data) => {
    console.log ("child process: " + data.toString ());
});

В некоторых случаях может быть полезно также захватить вывод stderr, который поток NodeJS 'console.err () записывает в:

child.stderr.on ("data", (data) => {
    console.log ("child process error: " + data.toString ());
});

Кроме того, чтобы убедиться, что дочерний процесс завершился с кодом, отличным от кода ошибки, т.е. код выхода равен 0, вы можете использовать NodeJS 'child_process "exit" сигнал:

child.on ("exit", (code, signal) => {
    if (signal !== null) console.log ("child exited due to signal '" + signal + "'");
    else console.log ("child exited with code " + code);
});

Для получения дополнительной информации обязательно ознакомьтесь с NodeJS' документацией по child_process.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...