[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mult-thread bash
From: |
Juliano |
Subject: |
Re: mult-thread bash |
Date: |
Wed, 23 May 2007 18:52:57 -0300 |
User-agent: |
Icedove 1.5.0.10 (X11/20070329) |
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 <address@hidden
<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]