A process is a waitable object. It’s signalled when process terminates. You can use KeWaitForSingleObject to check its state.
Whether the process object is still valid should not have any relevance. If you want it to stay valid for later usage, you make sure to call ObReferenceObject. When you don’t need it anymore, you call ObDereferenceObject.