nodejs发送信号给subprocess不起作用
我正在学习nodejs,并且检查了一些关于向subprocess发送信号的例子,就像下面的代码一样,在子节点中的“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.js执行的时候,执行语句的时候吗? 希望任何人都可以提供详细的解释? 谢谢。
var child = spawn('node', ['child.js']);
第一个问题是你产生一个subprocess,然后立即发送SIGINT。 由于subprocess(可能)还没有运行,它没有注册该信号,因此被杀死。 最简单的方法是将它放在setTimeout
:
setTimeout(function() { child.kill('SIGINT'); }, 100);
现在你会看到
data from child: child calling
然后它将退出。 但是你正在等待SIGINT消息。 这次的问题是subprocess日志,注册信号,然后完成。 node.js
会结束,如果它完成,并没有等待其他任何东西。 它将等待的东西包括开放的套接字, setTimeout
等,你需要它做的事情,虽然。 作为一个简单的testing,你可以添加到child.js
:
setInterval(function() { console.log('hey!'); }, 1000);
或类似的东西。 然后你会看到你所期望的输出。