[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: