If you are thinking about an alternate approach to avoid having something in the user side you can make parent as a message broker if you are calling parent and immediately calling child.
User ---request(Resouce)--> Parent --request(Resouce)--> Child
User <---reponse------------ Parent <-response----------- Child
The parent has to cast the request to the child so that it can avoid blocking. This way the parent can also keep a track of the child and respond accordingly to the user. If the child shuts down, it can restart accordingly or it can shutdown the child if there are no active requests. The parent should not have any processing as it might become a bottleneck in this approach.