nodejs向子进程发送信号不起作用

时间:2015-09-12 00:38:39

标签: javascript node.js

我正在学习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']);

1 个答案:

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

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