Re: Несколько вопросов вразброс
On Thu, Jul 19, 2012 at 10:53:11AM +0300, Igor Chumak wrote:
> Защиту от запуска второй копии я делал так:
>
> if [ -f $lockfile ]
> then
> echo "Lock file $0.lock exist!"
> while [ -f $lockfile ]
> do
> pid=`cat $lockfile`
> if [ -n "$pid" ]; then
Скрипт мог умереть, не потерев за собой свой lockfile, а его PID - мог
быть занят новым процессом (каким-нибудь рефоркающимся демоном, например).
В результате - deadlock.
> echo "pid=$pid in lockfile; our pid=$$"
> if ps $pid ; then
> echo "Process exist; waiting"
> else
> echo "no process with $pid; remove lockfile"
> rm -f $lockfile
> fi
> else
> echo "no process with $pid; remove lockfile"
> rm -f $lockfile
> fi
> echo "sleep 10s"; sleep 10
> done
> fi
Ну и тут, строго говоря, имеет место быть race condition.
> echo $$>$lockfile
>
> (Если обнаруживаем вторую копию - ждем пока она завершится.)
--
Stanislav
Reply to: