我在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上我正面临这个问题。
答案 0 :(得分:14)
子进程可以通过两种方式退出:自愿,在这种情况下,退出代码将通过信号返回或非自愿地返回。
从exit
处理程序的参数,第一个反映退出代码,第二个反映信号。其中一个将包含一个值,另一个将包含null
。如the documentation中所述:
如果退出流程,
code
是流程的最终退出代码,否则为null
。如果由于收到信号而终止了该过程,signal
是信号的字符串名称,否则为null
。其中一个永远不会为空。
如果您的子进程收到SIGKILL
,并且您没有(明确地)发送该信号,那么很有可能该进程被Linux {{{ 3}},在系统绑定内存的情况下杀死进程(" OOM"表示" Out Of Memory" )。
因此,请确保您的系统有足够的内存,足够的交换,和/或您的进程不会占用太多内存(如果可能)。