Skip to content

Instantly share code, notes, and snippets.

@epall
Created November 8, 2012 20:24
Show Gist options
  • Save epall/4041344 to your computer and use it in GitHub Desktop.
Save epall/4041344 to your computer and use it in GitHub Desktop.
graceful restart
var net = require('net')
var child_process = require('child_process')
var number = process.argv.length > 2 ? parseInt(process.argv[2], 10) : 0;
function listen(server) {
server.on('connection', function(socket) {
socket.write('hi from #'+number+'\n');
});
process.on('SIGHUP', function() {
console.log('#'+number+" got SIGHUP");
var child = child_process.fork(process.argv[1], [number+1]);
child.on('message', function(message) {
if(message.ready) {
child.send({}, server);
} else if(message.die) {
console.log("process #"+number+" dying");
server.close(function() {
console.log("#"+number+" done");
process.exit(0);
});
}
});
});
}
if(process.send) {
process.send({ready: 1});
process.on('message', function(message, server) {
listen(server);
console.log("process #"+number+" ready and killing parent");
process.send({die: 1});
});
}
else {
var server = net.createServer();
server.listen(3000);
listen(server);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment