in reply to Fork Causing <defunct>

You're not reaping your children (using wait, waitpid or $SIG{CHLD} = 'IGNORE';). A process continues to exist after it exits so its parent can be notified of the exit and so the parent can fetch its exit code.

The program has to spawn a SAS process which does funny things to the terminal and so SAS is initiated in the parent process as opposed to the child

I don't follow. The parent and child should have equal access to the terminal.

Anyways the child waits for the parent process to end

Apparently not, since you said it's defunct.