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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Shell script "recursivo"


From: Julio C. Neves
Subject: Re: [shell-script] Shell script "recursivo"
Date: Tue, 9 Jun 2009 10:11:12 -0300

Fala Cesar,
o que vc está pedindo, é muito amplo e meu tempo é pouco, portanto vou te
dar as dicas para vc correr atrás, OK?

- Sobre o CTRL+C
Dá uma olhada no cmd
trap<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo010#O_trap_n_o_atrapalha>e
repare a diferença de uso das aspas e apóstrofos. Isso irá te permitir
matar os processos filhos;

- Sobre o cmd wait que vc usou
Ainda no link acima, repare que o sinal 17, monitora os processos filhos.
Desta forma teu script pai receberá o sinal 17 cada vez que um filho
terminar;

- Sobre processo em background
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).

Qq dúvida poste na lista que tento esclarecer.
-- 
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*

2009/6/8 César A. K. Grossmann <address@hidden>

>
>
> ALL
>
> Estou às voltas com um problema interessante de programação shell script. O
> que eu quero é chamar um shell script, que por sua vez vai se chamar a si
> mesmo "n" vezes, cada uma com um parâmetro diferente na linha de comando,
> mas não vai esperar para terminar a execução, vai colocar em background e,
> quando eu der Ctrl-C no processo-pai, matar todos os filhos e então
> encerrar. Meio estranho, não? Podem pensar nisto como uma espécie de
> super-servidor, ou coisa do tipo. Um pseudo código para o que eu estou
> pensando seria:
>
> inicio
> se "$1" estiver vazio
> então
> para argumento em arg1 arg2 arg3
> faça
> $0 $argumento &
> fim-faça
> espera Ctrl-C
> mata filhotes
> fim
> senão
> repetir
> comando-qualquer $1
> espera 15 segundos
> fim-repetir
> fim-se
> fim
>
> Cheguei a alguma coisa assim:
>
> #!/usr/bin/env bash
>
> if [ -z "$1" ]
> then
> for arg in primeiro segundo terceiro
> do
> $0 $arg &
> done
> wait
> else
> while true
> do
> echo $1
> sleep 15
> done
> return
> fi
>
> A pergunta: esta é a melhor técnica de implementar este tipo de coisa?
>
> Outra pergunta, para impedir que o script seja executado mais de uma vez
> sem parâmetro nenhum, o ideal é colocar uma espécie de "lock file", qual a
> técnica usada em shell script para isto? E para garantir uma saída "limpa"?
>
> 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]