Each new program executed by the shell is a child process of the shell.
The shell will send keyboard signals such as SIGINT (interrupt) and SIGTSTP (stop)to all members of the foreground process.
But each program executed by the shell should get its own process group, otherwise all background processes, foreground processes would get any signals sent to the group.
How?
Note:A process (and all of its children if any) executed by a shell is a job.