If any part of the program is running - like the program that your program shelled to - you can't close your program. Parent processes can't be closed until all child processes close - and shelling creates a child process.