[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Shell script "recursivo"
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Re: Shell script "recursivo" |
Date: |
Tue, 9 Jun 2009 11:37:31 -0300 |
>
> > 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]