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 <cesar...@bol.com.br> > > > 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]