[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Como saber se meu shell já está executando?
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: [shell-script] Como saber se meu shell já está executando? |
Date: |
Wed, 16 Mar 2005 11:21:46 -0300 |
Grande Felipe,
é muito bom tê-lo de volta. Pessoal, o Felipe é fera em Shell e andava
sumido da lista!
Eu nunca tive problemas com uso de named pipes para simular lock. O que faço
é um daemon que fica em um loop perpétuo e a 1a. isntuçaõ do loop é um cat
/named/pipe e deste modo recebe o registro para trabalhar. Outra pessoa que
necessite trabalhar com o arquivo que está sendo alterado pelo daemon, só o
conseguirá qdo o loop voltar ao cat inicial e isso só se dará após o término
da atualização.
Outro uso bacana é em um CGI para contar hits em sites, que procede de
maneira semelhante ao que descrevi acima para evitar a perda de hits
simultâneos de 2 ou mais pessoas.
[ ]s,
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden
| -----Mensagem original-----
| De: Felipe Kellermann [mailto:address@hidden]
| Enviada em: terça-feira, 15 de março de 2005 19:14
| Para: address@hidden
| Assunto: Re: [shell-script] Como saber se meu shell já está
| executando?
|
|
|
| On Tue, 15 Mar 2005 5:57pm -0300, Julio Cezar Neves -
| DATAPREVRJ wrote:
|
| > ter 100% de segurança é muito dificil! Qdo tiver um tempo
| vou tentar bolar
| > uma solução usando named pipe, que eu já uso com freqüência
| para simular um
| > lock.
| >
| > Aê pessoal! Vê se dá para sair uma solução por este caminho.
|
| Tradicionalmente se usa o lockfile. Vem junto com procmail/formail.
| Lembro que existe um ou outro projeto mais específico para isso.
|
| Para esses tipos de coisas eu sempre recomendaria algum
| software que é, em
| teoria, "não portável". Como eles ficaram, infelizmente, fora
| dos padrões,
| eu acho que é interessante difundir e incentivar o uso
| (p.ex., do mktemp).
|
| Um exemplo simples:
| $ locked.sh
| lock: lock-15650
| processo a: Ter Mar 15 19:01:43 BRT 2005
| coisas do processo a...
| processo a: Ter Mar 15 19:01:46 BRT 2005
| processo b: Ter Mar 15 19:01:51 BRT 2005
| coisas do processo b...
| processo b: Ter Mar 15 19:01:52 BRT 2005
| $
|
|
| Este é o exemplo:
| $ cat locked.sh
| #!/bin/sh
|
| lock=lock-$$
|
| function proc_a {
| lockfile $lock
| printf " processo a: %s\n" "$(date)"
| printf " coisas do processo a...\n"
| sleep 3
| rm -f $lock
| printf " processo a: %s\n" "$(date)"
| }
|
| function proc_b {
| lockfile $lock
| printf " processo b: %s\n" "$(date)"
| printf " coisas do processo b...\n"
| sleep 1
| rm -f $lock
| printf " processo b: %s\n" "$(date)"
| }
|
| printf "lock: %s\n" $lock
| proc_a &
| proc_b &
| wait
| $
|
| Não sei se named pipes seriam interessantes. A possibilidade
| de tu acabar
| com algum processo esperando indefinidamente é grande e
| natural. Ou existe
| alguma dica especial?
|
| --
| Felipe Kellermann
|
| [As partes desta mensagem que não continham texto foram removidas]
|
|
|
| ---------------------------------------------------------------------
| 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.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos