Um processo filho fork de um shell em bg recebe sinais SIGSTOP do pai?

1

Relacionadas com a página de manual do Signal :

A child created via fork(2) inherits a copy of its parent's signal dispositions. During an execve(2), the dispositions of handled signals are reset to the default; the dispositions of ignored signals are left unchanged.

Nesse caso, ele não deve ser totalmente relacionado se o processo filho for executado em primeiro plano ou em segundo plano.

Exemplo:

Se eu iniciar xterm como um processo filho bg em shell ...

xterm &

... e inicie um processo bg em xterm like

'ls -lR / &'

o processo ls pára quando eu paro xterm no shell com

kill -STOP [pid_of_xterm]

?

Acho que não, mas não sei porquê.

Agradeço sua ajuda ...

    
por goulashsoup 24.11.2016 / 20:48

1 resposta

2

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).

    
por 25.11.2016 / 01:17