我每次使用状态代码8 退出子进程时都会出现一些奇怪的原因。我做了一堆谷歌搜索试图弄清楚什么是状态代码8和什么可能导致这种奇怪的行为在Ubuntu但没有运气。我了解到Node.js甚至不使用退出状态代码8,所以我非常有信心它不是V8。我尝试在不同但相同的Ubuntu服务器上执行相同的代码,它工作正常。请注意,我在此服务器上使用负载均衡器。我不确定是什么导致了这个问题。
以下是规格:
这是分叉的子进程(就像我说的那样极少)
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});
答案 0 :(得分:-3)
解决方案:如果其他人遇到此问题,我设法让silent
设置为true。
var testBot = childProcess.fork(require.resolve("./../../bots/testBot"),[],{silent:true});