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

[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]





reply via email to

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