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

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



reply via email to

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