It is sometimes useful to update the running code and/or configuration of a network service, without disrupting existing connections. Usually, this is achieved by starting a new process, somehow transferring clients to it, and then exiting the old process. There are many ways to implement graceful upgrades. They vary wildly in the trade-offs they make, and how much control they afford the user. No old code keeps running after a successful upgrade. The new process has a grace period for...