The motivation is to ensure that if an AsyncProcess is created and the creator process dies unexpectedly (e.g, via Out-of-memory SIGKILL), the child process and resources held by it should not be leaked. The child should monitor its parent and exit promptly if the parent exits. [test process] -> [parent using AsyncProcess (dies)] -> [worker process] \ / \________ <-- child_pipe <-- ________/