lockf
- execute a command while holding a file lock
SYNOPSIS
[-ks
]
[-t seconds
]
filecommand
[arguments
]
DESCRIPTION
The
utility acquires an exclusive lock on a
file
creating it if necessary,
Bf Em
and removing the file on exit unless explicitly told not to.
Ef While holding the lock, it executes a
command
with optional
arguments
After the
command
completes,
releases the lock, and removes the
file
unless the
-k
option is specified.
BSD -style
locking is used, as described in
flock(2);
the mere existence of the
file
is not considered to constitute a lock.
If the
utility is being used to facilitate concurrency between a number
of processes, it is recommended that the
-k
option be used.
This will guarantee lock ordering, as well as implement
a performance enhanced algorithm which minimizes CPU load associated
with concurrent unlink, drop and re-acquire activity.
It should be noted
that if the
-k
option is not used, then no guarantees around lock ordering can be made.
The following options are supported:
-k
Causes the lock file to be kept (not removed) after the command
completes.
-s
Causes
to operate silently.
Failure to acquire the lock is indicated only in the exit status.
-t seconds
Specifies a timeout for waiting for the lock.
By default,
waits indefinitely to acquire the lock.
If a timeout is specified with this option,
will wait at most the given number of
seconds
before giving up.
A timeout of 0 may be given, in which case
will fail unless it can acquire the lock immediately.
When a lock times out,
command
is
not
executed.
In no event will
break a lock that is held by another process.
EXIT STATUS
If
successfully acquires the lock, it returns the exit status produced by
command
Otherwise, it returns one of the exit codes defined in
sysexits(3),
as follows:
EX_TEMPFAIL
The specified lock file was already locked by another process.
EX_CANTCREAT
The
utility
was unable to create the lock file, e.g., because of insufficient access
privileges.
EX_USAGE
There was an error on the
command line.
EX_OSERR
A system call (e.g.,
fork(2))
failed unexpectedly.
EX_SOFTWARE
The
command
did not exit normally,
but may have been signaled or stopped.