Date: Thu, 01 Apr 2004 12:31:32 +0600
From: Artem Chuprina <ran+news@ran.pp.ru>
Newsgroups: ftn.ru.perl
Subject: Как правильно создавать lock-файл
AVY> my $me = basename($0);
AVY> $pidfile = "/var/run/$me.pid";
AVY> if (open(PID,"$pidfile")) {
AVY> my $last_pid=<PID>;
AVY> close PID;
AVY> if (defined $last_pid && kill 0,$last_pid) {
AVY> warn "Error: $me already runningn";
AVY> exit 255;
AVY> }
AVY> }
AVY> open (PID,">$pidfile"); print PID $$; close (PID);
А теперь выкинуть этот диверсантский код и сделать по-человечески:
открываем pid-file;
блокируем эксклюзивно в неблокирующем режиме;
если удалось заблокировать - значит, другого нет. Пишем pid и держим
открытым и заблокированным.
если заблокировать не удалось - значит, работает другой. Ругаемся и
завершаемся.
Понимание, почему код диверсантский, оставляется в качестве домашнего
упражнения.