Um exemplo:
bash-4.3$ ( ( sleep 2 & (ps -Hfj | sh -c cat; perl -MPOSIX -E 'say tcgetpgrp 0'; sleep 5;:);:);:)
UID PID PPID PGID SID C STIME TTY TIME CMD
chazelas 18631 3848 18631 18631 0 12:51 pts/7 00:00:00 /bin/zsh
chazelas 2184 18631 2184 18631 0 21:00 pts/7 00:00:00 bash --norc
chazelas 2430 2184 2430 18631 0 21:07 pts/7 00:00:00 bash --norc
chazelas 2431 2430 2430 18631 0 21:07 pts/7 00:00:00 bash --norc
chazelas 2432 2431 2430 18631 0 21:07 pts/7 00:00:00 sleep 2
chazelas 2433 2431 2430 18631 0 21:07 pts/7 00:00:00 bash --norc
chazelas 2434 2433 2430 18631 0 21:07 pts/7 00:00:00 ps -Hfj
chazelas 2435 2433 2430 18631 0 21:07 pts/7 00:00:00 sh -c cat
chazelas 2436 2435 2430 18631 0 21:07 pts/7 00:00:00 cat
2430
No momento em que ps estava em execução, havia 7 processos no grupo de processos 2430: 3 processos subshell ( bash ), um executando ps , um executando sh , um executando cat , um executando sleep 1 . Posteriormente, os processos gerados para executar perl e sleep 5 também estariam no mesmo grupo.
tcgetpgrp() confirma que 2430 era de fato o grupo de processos em primeiro plano do dispositivo terminal, então, ao pressionar Ctrl + C , todos os processos naquele grupo receberiam um SIGINT.