A lot of installations launch sub-process as children of the main setup executable to perform the actual work. The installation is usually only completed when all child processes have ended.
With PKGShell you usually do not have to worry about this case, because PKGShell automatically waits for all children of a process to terminate by default. So even if the intermediate process terminates prematurely, PKGShell can still tell which processes were started by the initial process.
This is achieved using a little trick: A system handle is inherited to all process children. This handle will remain in existance until the last child has terminated. This technique works well in most cases - unless a process explicitely closes all inherited handles. So far only one executable is known to do this: Windows' own Explorer.exe.
If in contrary you do not want PKGShell to wait for a started process or it's children, you can do this by using the command property .NoWait=1.