Я изучаю nodejs и проверял некоторые примеры отправки сигналов дочернему процессу, так же, как и следующие коды, сказано, что обработчик «SIGINT» у ребенка должен быть ответом, а я не получить любой выход.nodejs посылает сигналы дочернему процессу не работает
// parent.js
var spawn = require('child_process').spawn;
var child = spawn('node', ['child.js']);
child.stdout.on('data', function(data) {
console.log('data from child: ' + data);
});
child.kill('SIGINT');
// child.js
console.log('child calling');
process.on('SIGINT', function() {
console.log('Received SIGINT signal');
});
Когда я печатаю
узел parent.js
Почему нет выхода? даже вывод «child call» в child.js?
Надеюсь, что кто-нибудь мне поможет? Благодарю.
Кроме того, я не понимаю, когда выполняется child.js, во время выполнения инструкции? Надеюсь, кто-нибудь может дать подробное объяснение? Благодарю.
var child = spawn('node', ['child.js']);
Спасибо @Aaron Dufour. Я попробовал ваше предложение. Оно работает. Хотя я до сих пор не совсем понимаю ваши слова: «Вещи, которые он будет ждать, включают открытые сокеты, setTimeouts и т. Д.» Вы имеете в виду, что setTimeouts в parent.js откроет дочерние сокеты? Не могли бы вы дать более подробное объяснение? Я также пробовал себя, я пытаюсь добавить «process.stdin.resume()» во главе child.js и добавить «process.stdin.end()» в обработчик «SIGINT», он также работает. Как насчет вашего мнения об этой резолюции? Спасибо. –
На самом деле я не совсем понимаю, что означает «открытые сокеты»? Неявно операции типа "process.stdin.resume()" ?? –
Открытые сокеты будут такими, как открытие TCP-соединения или запуск сервера (у ребенка). Что вы на самом деле пытаетесь сделать? То, что вы сейчас делаете, похоже на тест, но если вы сделаете что-то реальное, это скорее всего приведет к тому, что node.js будет продолжать работать. –