Unfortunately too many people concentrate on how to make their code go without considering how to make it stop. Are some (any) of these parallel processes event driven? If so, it's simple to define a universal stop event to bring them down.
Assuming there are non-event-driven processes, how are they structured? How are they stopped?
When shutting down you need to make sure that things will stop even if an error occurs during the shutdown.
Mike...