> > > Desta forma teu script pai receberá o sinal 17 cada vez que um filho > > terminar; > > Aí é que está. Os processos filhos ficarão rodando indefinidamente. O Wait > é mais para colocar o programa pai em espera de uma interrupção do usuário, > sem usar o "read". >
Ahhhh! Entendi. O usual é usarmos o sinal 1 para isso (mas pode ser usado qq outro). Para isso basta "inibir o sinal". Algo assim: trap "" 1 Se o operador der um kill -1 ou kill -HUPP, o processo (que estava parado no wait) não executará nada e voltará para a instrução seguinte. > > A variável $! tem o PID do último processo em background. Assim fica > fácil > > montar uma lista dos processos que estão em bg e ir limpando-a à medida > que > > vc for recebendo sinais 17. O que sobrar na lista vc deverá matar no trap > > qdo receber um crtl+c (sinal 2). > > É mais simples, se o programa funcionar corretamente, os filhos não devem > morrer antes do pai, ou melhor, só devem morrer pelas mãos do pai > (Saturno?). Então é só montar a tal lista de processos (FIFO/FILO/STACK - dá > uma pista aí que eu sigo o resto), e depois matar eles um por um. > Veja isso: $ trap 'echo morreu $!' 17 $ sleep 3& [1] 8804 $ morreu 8804 $ Lista="1111 2222 8804 3333" $ sed 's/ 8804//' <<< "$Lista" 1111 2222 3333 Isso foi só um exemplo didático, no duro vc montaria a lista a cada processo que vc iniciasse, fazendo assim: Lista=$Lista$!" " E a cada processo que morresse vc deveria fazer: sed 's/ $!//' <<< "$Lista" -- Abraços, Julio *Cursos de Shell e Zenity? - Em SP ligue (11) 2125-4747; - Em DF ligue (61) 3223-3000; - No RJ darei um treinamento em 23/07 (p/ detalhes ligue (21) 2561-0867); - Turmas fechadas em outras cidades ligue (21) 8112-9988* > > Abraços. > > > [As partes desta mensagem que não continham texto foram removidas]