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); 

或类似的东西。 然后你会看到你所期望的输出。