Re: Несколько вопросов вразброс
On 20.07.2012 10:54, Stanislav Maslovski wrote:
> 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.
Кстати, точно... Надо тогда проверять процесс по имени файла. Хотя, не факт, что
имя не могло измениться (переименовали программку просто - и всё). По идее,
остаётся только мьютекс. Ну или тот же flock.
>> 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.
В упор не вижу. Где?
Reply to: