Since this is an issue, I assume that the program will be run without a person sitting there watching it, correct?
Also, I'm guessing that the forked processes will sometimes be run by a human directly and may then require user input, but sometimes will be run by your program, and for whatever reason will be able to function properly without receiving any input in that case.
If my assumption and my guess are correct, then why not add a command line argument to the program that gets forked? Wrap the sections that get user input in an 'if' and just skip over that section if the command line argument has been set. That way you can fork it without having it hang by passing the correct argument, and it will still work as usual if invoked directly from the command line.
It's not particularly fancy or elegant, but it's simple and should work unless there's constraints I'm not aware of