Na verdade isso ainda é uma estudo de caso para ver consigo resolver em 
shell ao invés de escrever um binário para isso:

Vamos supor um script de limpeza de spam:

Eu gostaria de ao tempo que o script faz o total de msgs desses 
diretórios ele dividisse o a remoção em 4 processos por exemplo, e fosse 
realocando os ids de mensagem a medida que uma fila de remoção de cada 
um dos processos fosse diminuindo, nesse caso não adianta eu fazer job 
control ou fork desse shell, pois assim não tenho controle do que está 
sendo processado, e supondo que acabou o lista do primeiro ele não vai 
balancear entre os outros 3 em memória para continuar usando 4 processos 
de remoção.

Cheguei a fazer uma contagem do total dividir isso em um array e fazer 
os sub processos mas isso cai na situação que eu disse acima:

pid 10 shell ---> pid 11 10 fork 1 = 1000msgs
                  pid 12 10 fork 2 = 1000msgs
                  pid 13 10 fork 3 = 1000msgs
                  pid 14 10 fork 4 = 1000msgs

Caso o fork 1 acabe e tenhamos a situação:

pid 10 shell ---> pid 11 10 fork 1 = 0
                  pid 12 10 fork 2 = 700msgs
                  pid 13 10 fork 3 = 900msgs
                  pid 14 10 fork 4 = 500msgs

Eu gostaria de redistribuir e balancear o que não esta em processamento 
no momento ganhando performance com isso e o único jeito que vejo de 
fazer isso é usando threads dai veio a pergunta.

## Original ##
#!/bin/bash

match="pr0n|echa"

count=0
for messages in /var/spool/postfix/maildrop/* 
/var/spool/postfix/defer/*/* /var/spool/postfix/deferred/*/* 
/var/spool/postfix/active/*/*
do
    if [ -f $messages ] ; then
       message=$(echo $messages | awk -F'/' '{if ( $5 ~ /maildrop/ ) { 
gsub(/\*/,"",$6) ; print $6 } else {  gsub(/\*/,"",$7) ; print $7}}')
       if egrep -i "$match" $messages > /dev/null ; then
           postsuper -c /etc/postfix -d $message
           spam="$message $spam"
           count=$(expr $count + 1)
       fi
    fi
done
echo "Foram removidas $count mensagens"



Tiago Barcellos Peczenyj wrote:
> 
> 
> Juliano, explique melhor
> 
> O meu conhecimento vai até colocar um ou mais processos em backgrounds, cada
> um com um PID associado. Vc pode enviar sinais para estes PIDs (kill / trap)
> e pode aguardar o fim desses PIDs via comando wait.
> 
> O que vc gostaria de fazer alem disso, Juliano?
> 
> []´s Tiago
> 
> On 5/23/07, Juliano <[EMAIL PROTECTED] 
> <mailto:juliano%40falaserio.org>> wrote:
>  >
>  > Caros,
>  >
>  > Alguém sabe se existe alguma implementação ou um modo não traumático de
>  > fazer mult-thread em bash, ou outro shell.
>  >
>  > []s
>  > ncode
>  >
>  >
>  >
> 
> -- 
> Tiago B Peczenyj
> Linux User #405772
> 
> # cd /pub
> # more beer
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 

Responder a