[Cascavel-pm] rodar processo em background sem navegador aberto

Marco A P D'Andrade mdacwb em gmail.com
Domingo Agosto 31 11:57:59 PDT 2008


Sandro,

As dicas foram dadas, das que considero mais úteis, para executar em sua
forma atual:
  - Fork - by Luciano
  - Necessidade de proteção - by Eden


Agora meus complementos:

Para utilizar o fork, vc deve transformar seu processo em daemon, isto é
feito por um fork, fechamento de entradas (stdin, stdout e stderr) e a
independencia do pae (POSIX::setsid). Maiores detalhes, e exemplo completo
comentado:

   http://perldoc.perl.org/perlipc.html#Background-Processes


Proteção:

Considerando que vc terá processamento demorado, por isto necessita de um
daemon, vc deverá garantir que não serão solicidos mais processamentos que
seu hardware pode aguentar. Para isto vc pode utilizar um pseudo-semaforo
(arquivo de controle, e não ipc real) com flock, ou arquivos de pid, com
kill(0) para validar a execução...

O uso de flock consistiria em criar um arquivo, digamos em /var/run e fazer
um lock. No caso de falha nesta ação, recusaria o processamento, dando a
resposta que julgar adequada (falha, tente mais tarde, já em execução).

Uso de flock é descrito na documentação:

   http://perldoc.perl.org/functions/flock.html


O uso de kill(0), lembro de ter lido um exemplo em uma das listas, e segundo
meus rápidos testes foi eficaz. Consiste em ler um arquivo de pid, e se
houver um valor, tentar um kill(0, $pid). Se falhar, o processo já morreu, e
pode iniciar outro.

Novamente, voltamos à documentação do Perl IPC (Inter Process Comunication):

   http://perldoc.perl.org/perlipc.html#Signals


Espero ter sido útil.


Sds,
Marco Antonio


2008/8/29 Sandro de Almeida Filho <sandroalmeidafilho em gmail.com>

> Por exemplo:
> acessarei www.meusite.com.br/aplicacao.pl
>
> Neste aplicacao.pl há um loop muito grande, processando dados. Oo
> fechar o navegador, o loop está encerrando antes da hora.
> É isso que desejo resolver.
>
> Alguma dica?
>
> []'s
> Sandro
>
>
>
> 2008/8/29 Fernando Oliveira <fernandocorrea em gmail.com>:
> > Não devo ter entendido a pergunta...
> > Mas já tentou rodar fora do apache?
> > Tipo:
> > ./seu_prog.pl
> > ou
> > perl seu_prog.pl
> >
> > ...
> >
> > Mas realmente eu não devo ter entendido a sua pergunta...
> >
> > 2008/8/29 Sandro de Almeida Filho <sandroalmeidafilho em gmail.com>
> >>
> >> Pessoal, como faço para rodar um script perl em background sem deixar
> >> o navegador web aberto? Nos testes que fiz, ao fechar o navegador a
> >> aplicação terminava.
> >>
> >> []'s
> >> Sandro
> >> _______________________________________________
> >> Cascavel-pm mailing list
> >> Cascavel-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> >
> >
> > --
> > Just another Perl Hacker,
> > Fernando (SmokeMachine)
> > http://perl-e.org
> >
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20080831/0513d40c/attachment.html>


Mais detalhes sobre a lista de discussão Cascavel-pm