The way proper servers like Apache handle that is by shutting things down gracefully. I.e. if a child process gets a termination request (for whatever reason, e.g. using too much memory is an important one, or a SIGTERM sent by the admin), it'll finish processing all in-flight requests, then shut down. In the meantime the frontend process is going to redirect new connections/requests to a different/new child.
Of course this kind of thing requires protocol knowledge, which is why in my opinion a general purpose watchdog like supervise is an awful solution. It is only the very last resort if you have nothing else available.
To be honest I have no good idea on how to even do this w/ Swift. Which is bad, because those kind of bugs are so common in the Swift reality. Let's do Objective-C on the server again! ;-)