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

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

RES: [shell-script] Bash e execugco paralela de programas


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Bash e execugco paralela de programas
Date: Wed, 7 May 2003 16:31:13 -0300

Fala Marilton!
fazendo um man bash, veja só o que vc encontra:

wait [n]
       Wait for the specified process and return its termination status.  n
may be a process
       ID  or  a  job  specification;  if  a  job spec is given, all
processes in that job's
       pipeline are waited for.  If n is not given, all currently active
child processes are
       waited  for, and the return status is zero.  If n specifies a
non-existent process or
       job, the return status is 127.  Otherwise, the return status is the
exit  status  of
       the last process or job waited for.

Portanto o builtin wait atende às suas expectativas, porém ele não deverá
ser colocado dentro do loop que vc dispara o comando em background pq desta
forma ele esperaria cada um terminar para só então executar uma nova volta
do loop, demorando quase tanto como se os comandos estivessem em foreground.

Acho que uma boa forma (que não testei) seria fazer assim:
Waits=
cat parametros.txt | while read f; do
   comando1 $f &
   Waits="${Waits}wait $! ;"
done
eval $Waits
comando2

A variável Waits receberá diversos comandos wait $! ($! = Num do último
processo colocado em background) separados por ponto-e-vírgula (;). Na saída
do loop, um cmd eval executará os cmds dentro de $Waits.

Aê Aurelio, viu como o eval é bão???!!!

Outra forma de fazer isso é usando named-pipes ou fifo. Dê uma olhada em
mkfifo.

[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070  /  9853-4044
*address@hidden


> -----Mensagem original-----
> De: Marilton Sanchotene de Aguiar 
> [mailto:address@hidden]
> Enviada em: quarta-feira, 7 de maio de 2003 14:46
> Para: address@hidden
> Assunto: [shell-script] Bash e execugco paralela de programas
> 
> 
> 
> Olás!
> 
> Preciso de uma ajuda com Bash... tenho o seguinte script em 
> um arquivo com um
> nome qualquer:
> 
> cat parametros.txt | while read f; do
>   comando1 $f &
> done
> comando2
> 
> Pergunta: Como fazer para o comando2 somente ser executado 
> após TODOS os
> processos em background terem terminado sua execução.
> 
> Marilton.
> 
> -- 
> [Marilton Sanchotene de Aguiar          http://leibniz.ucpel.tche.br/]
> [Linux Registered User #73488              http://gulp.ucpel.tche.br/]
> 
> 
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de 
> programação, como perl, C etc. Quem insistir em não seguir 
> esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html 



reply via email to

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