diff --git a/lib/shutdown.js b/lib/shutdown.js index 7fa3c2fdea4a826205b61d3f087e292016627121..150ed351f73ed4a22ad3acb5b638898844c56ae4 100644 --- a/lib/shutdown.js +++ b/lib/shutdown.js @@ -75,5 +75,7 @@ exports.handleTerminationSignals = function(app, callback) { }; } - process.on('SIGINT', endIt('INT')).on('SIGTERM', endIt('TERM')).on('SIGQUIT', endIt('QUIT')); + if (process.env.SUPPORTS_SIGNALS) { + process.on('SIGINT', endIt('INT')).on('SIGTERM', endIt('TERM')).on('SIGQUIT', endIt('QUIT')); + } }; diff --git a/package.json b/package.json index b059e07e2760b65c0761513689a6c79c97732214..c09dacddebe7e947f0db18657cf6912983410e16 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "scripts": { "postinstall": "node ./scripts/generate_ephemeral_keys.js", "test": "./scripts/test", - "start": "./scripts/run_locally.js" + "start": "node ./scripts/run_locally.js" }, "engines": { "node": ">= 0.6.7" diff --git a/scripts/run_locally.js b/scripts/run_locally.js index 028ccfd2187e6dcfe347a05c98c08565675c79ea..7aad2a27fb5cc16a3425785b2bc77d2a5fc83ab4 100755 --- a/scripts/run_locally.js +++ b/scripts/run_locally.js @@ -78,8 +78,24 @@ if (config.get('env').substr(0,5) === 'test_') { } } +// Windows can't use signals, so lets figure out if we should use them +// To force signals, set the environment variable SUPPORTS_SIGNALS=true. +// Otherwise, they will be feature-detected. +var SIGNALS_PROP = 'SUPPORTS_SIGNALS'; +if (!(SIGNALS_PROP in process.env)) { + try { + function signals_test() {} + process.on('SIGINT', signals_test); + process.removeListener('SIGINT', signals_test); + process.env[SIGNALS_PROP] = true; + } catch (noSignals) { + process.env[SIGNALS_PROP] = false; + } +} + function runDaemon(daemon, cb) { Object.keys(daemonsToRun[daemon]).forEach(function(ek) { + if (ek === 'path') return; // this blows away the Window PATH process.env[ek] = daemonsToRun[daemon][ek]; }); var pathToScript = daemonsToRun[daemon].path || path.join(__dirname, "..", "bin", daemon); @@ -104,6 +120,7 @@ function runDaemon(daemon, cb) { console.log("spawned", daemon, "("+pathToScript+") with pid", p.pid); Object.keys(daemonsToRun[daemon]).forEach(function(ek) { + if (ek === 'path') return; // don't kill the Windows PATH delete process.env[ek]; }); @@ -133,7 +150,9 @@ daemonNames.forEach(function(dn) { }); }); -process.on('SIGINT', function () { - console.log('\nSIGINT recieved! trying to shut down gracefully...'); - Object.keys(daemons).forEach(function (k) { daemons[k].kill('SIGINT'); }); -}); +if (process.env[SIGNALS_PROP]) { + process.on('SIGINT', function () { + console.log('\nSIGINT recieved! trying to shut down gracefully...'); + Object.keys(daemons).forEach(function (k) { daemons[k].kill('SIGINT'); }); + }); +}