#! /usr/local/bin/perl chomp($pid = $$); $LOCK_EXCLUSIVE = 2; $UNLOCK = 8; $fifo = "ENV{HOME}/a_file"; popup($fifo); sub popup { my($fifo) = @_; while (! -e "$fifo.lock") { open (LOCK, "> $fifo.lock") || die "problem opening $fifo\n"; flock LOCK , $LOCK_EXCLUSIVE; print LOCK $pid; open (FILE, "< $fifo") || die "problem opening $fifo\n"; @lines = ; close(FILE) || warn "update queue file exited $?\n";; open (FILE, "> $fifo") || die "problem opening $fifo\n"; @sorted = sort @lines; $pop = shift @sorted; print "$hostname is poping $pop\n"; print FILE "@sorted\n"; close(FILE) || warn "update queue file exited $?\n";; close(LOCK) || warn "lock file exited $?\n";; $str=`cat $fifo.lock`; flock LOCK, $UNLOCK; } if ($pid eq $str) { print "PID lock file is going to be removed\n" ; system("rm $fifo.lock"); } }