func (c *ServerContext) ChildDone() {
	c.wg.Done()
}
ChildDone ...mark a child shutdown as done (-> use this method in defer)
package util
import (
	"context"
	"sync"
	log "github.com/sirupsen/logrus"
)
func NewServerContext() *ServerContext {
	ctx, cancel := context.WithCancel(context.Background())
	return &ServerContext{
		Context: ctx,
		wg:      &sync.WaitGroup{},
		cancel:  cancel,
	}
}
type ServerContext struct {
	context.Context
	wg     *sync.WaitGroup
	cancel context.CancelFunc
}
func (c *ServerContext) StopTheWorld() {
	log.Info("Stop the world!")
	c.cancel()
	log.Info("Waiting for subcommands to finish...")
	c.wg.Wait()
	log.Info("Done...bye bye!")
}
func (c *ServerContext) RegisterChild() {
	c.wg.Add(1)
}