Por que a finalização de um processo bash não-interativo afeta ou não o processo filho, ao executar um script?

1

Eu tenho um script bash script1 :

#! /bin/bash
evince 

e outro script script2

#! /bin/bash
evince &

Quando eu corro

./script2

o processo bash sai imediatamente após colocar evince em segundo plano, deixando o processo evince continuar em execução.

Quando eu corro

./script1 &

o processo bash aguarda que evince termine de executar.

Se eu kill do processo bash, o processo bash sai e também finaliza o processo evince .

Eu estava me perguntando por que o término do processo bash não afeta o processo evince no segundo script, mas no primeiro script?

Você poderia explicar em termos de chamadas do sistema, como fork(), exit() e wait() ?

Obrigado.

Isso está relacionado a Por que esse script executado em segundo plano sobrevive a 'kill' e ao término do shell de chamada? , mas aqui quero aprender o caso geral básico.

    
por Tim 28.05.2018 / 05:53

1 resposta

0

Se você realmente matou apenas o shell, você deve fazer um relatório de bug contra o bash.

Como os shells modernos ativam automaticamente o controle de trabalho para shells interativos,

./script1&

cria um novo trabalho com um ID de grupo de processos próprio.

O shell aguarda no programa evince e se você chamar:

kill -9 $!

apenas o shell será eliminado e evince continuará a ser executado.

Se você ligar, no entanto:

kill %1

Isso mata todo o trabalho, incluindo evince .

    
por 28.05.2018 / 14:14

Tags