[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Como saber se meu shell já está executando?
From: |
Felipe Kellermann |
Subject: |
Re: [shell-script] Como saber se meu shell já está executando? |
Date: |
Tue, 15 Mar 2005 19:14:01 -0300 (BRT) |
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]