我正在学习nodejs,并检查了一些关于向子进程发送信号的例子,就像下面的代码一样,在子进程中说“SIGINT”处理程序应该是响应,而我没有得到任何输出。
// 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.js中的“child calling”输出?
希望有人帮助我吗?感谢。
另外,我不清楚child.js何时被执行,在执行语句时?希望有人能详细解释一下吗?感谢。
var child = spawn('node', ['child.js']);
答案 0 :(得分:3)
第一个问题是你生成了一个子进程,然后立即发送它SIGINT。由于子进程(可能)还没有运行,它没有注册该信号,因此被它杀死。实现这一目标的最简单方法是将其放在setTimeout
:
setTimeout(function() {
child.kill('SIGINT');
}, 100);
现在你会看到
data from child: child calling
然后它会退出。但是你期待SIGINT消息。这次问题是子进程记录,注册信号,然后完成。 node.js
如果完成并且没有等待其他任何内容将结束。它将等待的东西包括打开套接字,setTimeout
等等。但是你需要它做某事。作为一个简单的测试,您只需添加到child.js
:
setInterval(function() {
console.log('hey!');
}, 1000);
或类似的东西。然后你会看到你期望的输出。