Nodejs分叉子进程立即退出,状态码为8

时间:2014-11-22 00:09:39

标签: node.js ubuntu ubuntu-14.04 child-process

我每次使用状态代码8 退出子进程时都会出现一些奇怪的原因。我做了一堆谷歌搜索试图弄清楚什么是状态代码8和什么可能导致这种奇怪的行为在Ubuntu但没有运气。我了解到Node.js甚至不使用退出状态代码8,所以我非常有信心它不是V8。我尝试在不同但相同的Ubuntu服务器上执行相同的代码,它工作正常。请注意,我在此服务器上使用负载均衡器。我不确定是什么导致了这个问题。

以下是规格:

  • 节点:v0.10.25
  • 经销商ID:Ubuntu
  • 描述:Ubuntu 14.04
  • LTS发布:14.04

这是分叉的子进程(就像我说的那样极少)


    process.on('message', function(data) {
        console.log('TEST BOT SAYS HELLO ' + process.pid)

        var fs = require('fs')
        fs.writeFile('message.txt', 'abc', function(err, data) {
            if (err) {
                return console.log(err);
            }
            console.log(data);
        });

    });

编辑: 堆栈跟踪中没有其他错误。任何解决这个问题的线索都会有所帮助!

以下是子进程的启动方式:



        function testChildProcess() {
            console.log('testing child process')
            var testBot = childProcess.fork(require.resolve("./../../bots/testBot"));

            testBot.send({
                data: 'hello'
            });

            testBot.on('exit', function(code, other) {
                console.log('Child process exited with exit code ' + code + ' other ');

            });
            testBot.on('error', function(code) {
                console.log('Child process ERRED with exit code ' + code);
                return nextTracker();
            });
        }
    testChildProcess()

增加: 该应用程序正在使用 https://github.com/yyx990803/pod 它在背景中使用pm2

https://github.com/Unitech/pm2 将应用程序作为守护程序启动。

我测试了产卵子进程并产生了一个子进程工作得很好......

child.js


    var test = function() {
        console.log('TEST BOT SAYS HELLO ' + process.pid)

        var fs = require('fs')
        fs.writeFile('./message.txt', 'abc', function(err, data) {
            if (err) {
                return console.log(err);
            }
            console.log(data);
        });

    }
    test();

parent.js



function testChildProcess() {
console.log(process.cwd());

        var ls = childProcess.exec('node '+process.cwd()+'/bots/testBot', function(error, stdout, stderr) {
            if (error) {
                console.log(error.stack);
                console.log('Error code: ' + error.code);
                console.log('Signal received: ' + error.signal);
            }
            console.log('stdout: ' + stdout);
            console.log('stderr: ' + stderr);

        });

        ls.on('exit', function(code) {
            console.log('Child process exited with exit code ' + code);
        });
    }

解决方案: 如果其他人得到这个问题。我设法通过将沉默设置为真来解决。


var testBot = childProcess.fork(require.resolve("./../../bots/testBot"),[],{silent:true});


1 个答案:

答案 0 :(得分:-3)

解决方案:如果其他人遇到此问题,我设法让silent设置为true。

var testBot = childProcess.fork(require.resolve("./../../bots/testBot"),[],{silent:true});