Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR enables
throng
to observe a shutdown signal beyondSIGINT
andSIGTERM
, for instanceSIGUSR2
. Two use cases that support the various changes in this PR:nodemon
, usesSIGUSR2
to restart the process. If the process traps the signal to enact some graceful shutdown,nodemon
expects the process to re-kill itself withSIGUSR2
—nodemon detects the corresponding exit code to resume control.SIGUSR2
to all Node processes before EB enacts deploys, makes configuration changes, etc; and then waiting for a period of time for the processes to exit.Why
SIGUSR2
and not one of the default signals (SIGTERM
orSIGINT
)? In the case ofnodemon
, because it's not customizable; in the case of EB, because we send the signal to all processes and we don't want the worker processes to exit before the master has begun the shutdown process.The EB use case is the more compelling since we don't really need to use clustering in local development. But, now
throng
supports that too. The onlynodemon
-specific change is havingthrong
exit with the code corresponding to the shutdown signal. If you feel we shouldn't change that behavior I can take it out, but it seems like good practice for the process to respect the signal exit codes as documented by Node in “Signal Exits” here.