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.