shell-script-pt
[Top][All Lists]
Advanced

[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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]