---
name: "INN::Utils::Shlock"
section: "3pm"
platform: "linux"
package: "inn"
version: "2.7.4-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/INN::Utils::Shlock"
---

# INN::Utils::Shlock(3pm)

Wrapper around the shlock program

## NAME

INN::Utils::Shlock - Wrapper around the shlock program

## DESCRIPTION

This Perl module wraps the [shlock(8)](/shlock/8.md) program so that it can easily be used. Calling **shlock** is more portable than using [flock(2)](/flock/2.md) and its corresponding Perl function because this function does not work as expected on all existing systems.

See the [shlock(8)](/shlock/8.md) documentation for more information.

Using INN::Utils::Shlock is straight-forward:

```
    use lib '<pathnews>/lib/perl';
    use INN::Utils::Shlock;
    my $lockfile = "myprogram.LOCK";
    # Acquire a lock.
    INN::Utils::Shlock::lock($lockfile);
    # Do whatever you want.  The lock prevents concurrent accesses.
    # Unlock.
    INN::Utils::Shlock::unlock($lockfile);
```

These two functions return `"1"` on success, `"0"` on failure.  For example, the success of (un)locking can be checked as:

```
    INN::Utils::Shlock::lock($lockfile)
        or die "cannot create lock file";
```

or:

```
    if (! INN::Utils::Shlock::lock($lockfile, 4)) {
        die "giving up after 4 attempts to create lock file";
    }
```

Instead of calling `"unlock(`*lockfile*`)"`, the `"releaselocks()"` function can be called.  It removes any leftover locks, which is useful when several different locks are used.  Another possible use is to call it in an END code block:

```
    END {
        # In case we bail out, while holding a lock.
        INN::Utils::Shlock::releaselocks();
    }
```

## INTERFACE

- lock(*lockfile*)

  Tries to create a lock file named *lockfile*.

  This function returns `"1"` on success, `"0"` on failure.

- lock(*lockfile*, *tries*)

  Tries to create a lock file named *lockfile*.  If it fails, locking attempts are repeated once every 2 seconds for at most *tries* times (including the first unsuccessful attempt).

  This function returns `"1"` on success, `"0"` on failure.

- lock(*lockfile*, *tries*, *delay*)

  Tries to create a lock file named *lockfile*.  If it fails, locking attempts are repeated once every *delay* seconds for at most *tries* times (including the first unsuccessful attempt).

  Note that `"lock(`*lockfile*`)"` is equivalent to `"lock(`*lockfile*`,` `1, 2)"`.

  This function returns `"1"` on success, `"0"` on failure.

- releaselocks()

  Removes all the lock files previously created by calling the `"lock(`*lockfile*`)"` function.

  This function returns the number of removed lock files.

- unlock(*lockfile*)

  Removes the file named *lockfile*.

  This function returns `"1"` on success, `"0"` on failure.

## HISTORY

Documentation and Perl module written by Julien Élie for InterNetNews.

## SEE ALSO

[perl(1)](/perl/1.md), [shlock(8)](/shlock/8.md).
