s6: the s6lockd internal program
Keywords: s6 s6lockd lockd asynchronous timed lock daemon

libs6
s6
Software
skarnet.org

# The `s6lockd` program

`s6lockd` is the s6lock daemon. It is a program that manages a set of lock files in a given directory, and associated timeouts.

## Interface

s6lockd does not fork, does not background itself automatically, and does not use syslog. It is not meant to be run directly by the user: it will be spawned by the s6lock client library.

There are 2 ways to use s6lockd:

1. Use the `s6lock_startf()` library call. An `s6lockd` child will then be spawned from your calling process, and automatically reaped when you call `s6lock_end()`. It requires care with applications that trap SIGCHLD. It also requires care with lock file permissions: an s6lockd instance might not be able to open a lock file created by a former instance run by another client with different permissions.
2. Use the `s6lock_start()` library call, together with a s6lockd service. For once, this is the recommended setup: s6lockd creates empty lock files, and having all s6lockd instances run under the same user simplifies permissions management considerably.

When run as a service, s6lockd has no "standalone" mode: it is designed to work with a Unix domain super-server, like s6-ipcserver. s6lockd follows the UCSPI interface, it can be directly executed from the super-server.

## Notes

- Unix does not natively provide a way to stop blocking on a lock acquisition after a timeout. To emulate such behaviour, s6lockd actually spawns an s6lockd-helper child per requested lock.