Here is an excerpt from the manual page for tcsetpgrp:
If tcsetpgrp() is called by a member of a background process group in its session, and the calling process is not blocking or ignoring SIGTTOU, a SIGTTOU signal is sent to all members of this background process group.
The SIGTTOU signal is normally sent when a background process tries to send output to its controlling terminal. The default action is to stop the process until it receives a SIGCONT signal!