Blocking until the process is finished was not very robust - in some
cases it could cause a deadlock preventing graceful exit. For example,
if the ug process is communicating with GUI through a socket and uses
blocking send - ug will wait for GUI to receive the data and GUI will
block waiting for ug to terminate.
Using this approach also allows to ignore crashes on exit, which are not
really worth reporting.