A child created via fork(2) inherits a copy of its parent's signal dispositions.
Isso significa que a criança lida com sinais da mesma maneira que seus pais: ela tem os mesmos manipuladores de sinais e o mesmo conjunto de sinais ignorados. Isso não significa que enviar um sinal para o pai de alguma forma também envie um sinal para o filho (caso contrário, matar um processo também mataria todos os seus descendentes…).
Um processo pode ser programado com um manipulador de sinal que retransmite o sinal para alguns ou todos os seus filhos, mas isso não é comum. E isso não pode ser feito para sinais que não podem ser manipulados como SIGKILL e SIGSTOP. Um caso raro em que isso é feito é que os shells interativos propagam o SIGHUP para executar tarefas.
No seu exemplo, com um processo ls que é filho de um shell que é filho do xterm, enviar um sinal STOP para o processo xterm apenas interrompe o processo xterm. Não tem impacto no shell ou no ls. Em algum momento, o ls irá bloquear tentando gravar no terminal, porque o terminal não está lendo os dados. O que isto significa é que a chamada do sistema write
no processo ls levará muito tempo, isso não tem nada a ver com sinais.
Existe uma maneira de entregar um sinal a um conjunto de processos com relacionamentos pai-filho, mas é uma decisão do chamador, não do destinatário do sinal, e o conjunto de processos tem que ser um process grupo . O objetivo dos grupos de processos é enviar um sinal para um trabalho de shell inteiro, mesmo que esse trabalho consista em vários processos (por exemplo, um pipeline).