$LOCK = $0; $MAX_RUNNING = 10; sub lock_count { return scalar split /\s+/, `fuser $LOCK 2>/dev/null`; } die ("Too many running processes") if (&lock_count >= $MAX_RUNNING); open(LOCK) or die("Failed to acquire lock"); die ("Too many running processes") if (&lock_count > $MAX_RUNNING);