O comando ps que você está usando não está relacionado ao UNIX.
O uso de key letters
em vez de options
foi usado no BSD ps
, mas isso nunca chegou ao padrão. O BSD até usa a letra da chave h
de uma maneira diferente, como você poderia esperar.
Eu recomendo usar:
ps -p $$
Se você quiser verificar se há mais instâncias desse script, use:
myname='basename $0'
pids='pgrep -d, $myname'
ps -p $pids
Em teoria, você não precisa mais executar ps
, seria suficiente verificar a saída de pgrep
para uma vírgula.
Se você gosta de implementar um algoritmo de arquivo de bloqueio e ter um shell compatível com POSIX, você pode usar:
set -o noclobber
:> /var/tmp/myscript
if [ $? -ne 0 ]; then
echo already running
exit 1
fi
... do some stuff
rm /var/tmp/myscript
Se isso funciona de forma confiável depende se o shell implementa noclobber da maneira que o POSIX gosta de vê-lo. Algumas shells podem não implementar isso atomicamente, então você precisa saber se a sua shell está OK.