On May 25, 2014, at 1:00 AM, Liu Wei wrote:
> Thanks ryandesign. this child_process is just for handling download csv files
> and then zip them. So the master process will do display csv files data and
> CRUD with Nosql.
Is that in your code now? It wasn't in the code you showed us. Again, if there
is nothing else for a node app to do, it will quit. If all the master is doing
is waiting for a child process to exit, then when the child process exits, the
master will also exit.
Additionally, your code requests that the master process exit whenever the
child process exits. It says so right here:
fork.onUnexpectedExit = function (code, signal) {
process.exit(1);
};
fork.on("exit", fork.onUnexpectedExit);
You invent a new property on the child object called "onUnexpectedExit" and
declare it as a function that exits the master when called. Then you ask node
to call that function when the child emits the "exit" event. The "exit" event
is emitted when the child exits, regardless of its code, so the property name
"onUnexpectedExit" that you've chosen is misleading; the only reference I found
to a property of that name is in this blog, so I guess you copied it from there:
https://www.exratione.com/2013/05/die-child-process-die/
If you only want to exit on unusual conditions, you should first check that the
code argument is nonzero.
Here is a revised version that shows that the master stays running if you give
it something else to do (like print a message once a second):
/* master.js */
var cp = require('child_process'),
fork = cp.fork('./child.js');
fork.send({ zip: '111' });
fork.on('message', function (msg) {
if (msg.status === 'done') {
fork.kill('SIGTERM');
}
});
fork.on('exit', function (code, signal) {
if (code) {
console.log('child exited unexpectedly with code', code);
process.exit(1);
} else {
console.log('child exited normally');
}
});
// Simulate other work happening in the master.
var i = 0;
setInterval(function () {
console.log(++i % 2 ? 'tick' : 'tock');
}, 1000);
/* child.js */
process.on('message', function (m) {
if (m.zip === '111' ) {
//Do something logic
//Simulate task taking 2.5 seconds to complete
setTimeout(function () {
process.send({status: 'done'});
}, 2500);
}
});
process.on('uncaughtException', function (err) {
console.log("child.js: " + err.message + "\n" + err.stack + "\n Stopping
background timer");
});
// SIGTERM AND SIGINT will trigger the exit event.
process.once('SIGTERM', function () {
console.log('SIGTERM');
process.exit(0);
});
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/77616159-6A5E-4831-B2FA-08C9D72B6818%40ryandesign.com.
For more options, visit https://groups.google.com/d/optout.