child_process以代码null

时间:2016-08-26 06:03:39

标签: node.js

我在centos6.X中运行我的节点服务器,并分支子进程。

var cp = require('child_process');
child = cp.fork(__dirname+'/worker');
child.on('exit', function (code, signal) {
            console.log('Child exited with code = ' +code+'  signal = '+signal);
 });

但几秒钟后我收到此错误

  

子代码退出,代码= null signal = SIGKILL

我现在无法解决这个问题,对于发生的事情没有更多的追踪。

更多澄清

我已将console.logs放入worker中,并且正在打印。工作人员正在等待来自主服务器的消息。但是等了几秒钟就退出了。我还使用node命令独立运行worker js,并且它不会退出。

相同的代码在我的本地OSX笔记本电脑上正常工作。但是在cloud centos6.X上我正面临这个问题。

1 个答案:

答案 0 :(得分:14)

子进程可以通过两种方式退出:自愿,在这种情况下,退出代码将通过信号返回或非自愿地返回。

exit处理程序的参数,第一个反映退出代码,第二个反映信号。其中一个将包含一个值,另一个将包含null。如the documentation中所述:

  

如果退出流程,code是流程的最终退出代码,否则为null。如果由于收到信号而终止了该过程,signal是信号的字符串名称,否则为null。其中一个永远不会为空。

如果您的子进程收到SIGKILL,并且您没有(明确地)发送该信号,那么很有可能该进程被Linux {{{ 3}},在系统绑定内存的情况下杀死进程(" OOM"表示" Out Of Memory" )。

因此,请确保您的系统有足够的内存,足够的交换,和/或您的进程不会占用太多内存(如果可能)。